2010. 6. 28. 11:57
quartz를 사용하고 멀티쓰레드로 작업을 병렬로 처리하던중.. 작업지연으로 인해서 이전 작업이 끝나기도 전에 다음 작업이 시작된다. 뭐.. 가장 좋은 방법은 단순하게 쿼즈가 실행하는 쓰레드 하나만 사용하면 좋것지만.. DB 성능 문제로 인해서 꼭 병렬처리를 수행해야 한다면.. ?? 이때.. Callable 인터페이스를 사용하여 쓰레드의 결과값을 받을 수 있다.
Launcher.java
Callable을 구현한 넘
위에 샘플은 단순한 사용방법을 구현했지만.. 다양한 방법으로 유용하게 사용할 수 있을듯.
Launcher.java
private final ExecutorService executor = Executors.newFixedThreadPool(THEAD_SIZE);
public void excute() {
Future[] future = new Future[THEAD_SIZE];
public void excute() {
Future[] future = new Future[THEAD_SIZE];
for(int i = 0;i<THEAD_SIZE;i++) {
future[i] = executor.submit(new WokerThread(synchData, 1, totalCount, reqVo));
}
for(int i = 0;i<THEAD_SIZE;i++) {
info.info("[" + future[i].get() + "] 종료" );
}
future[i] = executor.submit(new WokerThread(synchData, 1, totalCount, reqVo));
}
for(int i = 0;i<THEAD_SIZE;i++) {
info.info("[" + future[i].get() + "] 종료" );
}
}
Callable을 구현한 넘
import java.util.concurrent.Callable;
public class WokerThread implements Callable<String> {
public String call() {
while(true) {
return (String)Thread.currentThread().getName();
}
}
}
public class WokerThread implements Callable<String> {
public String call() {
while(true) {
return (String)Thread.currentThread().getName();
}
}
}
위에 샘플은 단순한 사용방법을 구현했지만.. 다양한 방법으로 유용하게 사용할 수 있을듯.
'java > concurrency' 카테고리의 다른 글
[Concurrency] - ExecutorService 를 이용한 동작주기 예제 (0) | 2010.06.29 |
---|---|
[Concurrency] - Executor 를 사용한 thread pool 샘플 (0) | 2010.06.29 |
[Concurrency] - BlockingQueue 과 producer-consumer 패턴 활용법 (0) | 2010.06.29 |
[Concurrency] - Singleton Pattern with java (0) | 2010.06.29 |
[Concurrency] - ThreadLocal 사용하기 (0) | 2010.06.28 |