- 리턴값이 있는 작업 완료 통보
package ex09_execute_submit;
import java.util.concurrent.*;
public class ResultByCallableExample {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(
Runtime.getRuntime().availableProcessors() // cpu의 코어수
);
System.out.println("[작업 처리 요청]");
Callable<Integer> task = new Callable<Integer>() {
@Override
public Integer call() throws Exception {
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += i;
}
return sum;
}
};
Future<Integer> future = executorService.submit(task);
try {
int sum = future.get();
System.out.println("[처리결과] " + sum);
System.out.println("[작업 처리 완료]");
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
executorService.shutdown();
}
}
결과:
[작업 처리 요청]
[처리결과] 45
[작업 처리 완료]
- 작업처리 결과를 외부 객체에 저장
package ex09_execute_submit.exam02;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ResultByRunnableExample {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(
Runtime.getRuntime().availableProcessors()
);
System.out.println("[작업 처리 요청");
class Task implements Runnable {
Result result;
public Task(Result result) {
this.result = result;
}
@Override
public void run() {
int sum = 0;
for (int i = 0; i < 10; i++) {
sum += i;
}
result.addValue(sum);
}
}
// 공유객체(외부객체)
Result result = new Result();
// 두개의 작업을 정의
Runnable task1 = new Task(result);
Runnable task2 = new Task(result);
Future<Result> future1 = executorService.submit(task1, result);
Future<Result> future2 = executorService.submit(task2, result);
try {
result = future1.get();
result = future2.get();
System.out.println("[처리 결과]" + result.accumValue);
System.out.println("[작업 처리 완료");
}
catch (InterruptedException e) {}
catch (ExecutionException e) {}
}
}
class Result {
int accumValue;
synchronized void addValue(int accumValue) {
this.accumValue += accumValue;
}
}
결과:
[작업 처리 요청
[처리 결과]90
[작업 처리 완료
'자바' 카테고리의 다른 글
어댑터 패턴 (0) | 2022.12.14 |
---|---|
dto 복사에 관하여 (0) | 2022.12.08 |
[스레드] 11. 스레드풀(2) (0) | 2022.05.05 |
[스레드] 10. 스레드풀(1) ExecutorService (0) | 2022.05.01 |
[스레드] 9. 스레드 그룹 (0) | 2022.05.01 |