다음은 ExecutorService
, Callable
및 Future
클래스를 학습 할 때 숙어로 사용했던 두 가지 간단한 클래스입니다.
크기가 2 인 스레드 풀을 사용하고 있고 처리해야 할 항목이 10 개 있다는 것을 알 수 있습니다. 기본적으로 스레드 풀을 만들고 Callable
을 구현하는 클래스를 전달한 다음 결과의 Future
을 처리 증명으로 사용합니다. 크기가 2 인 스레드 풀을 사용하면 한 번에 두 개의 항목 만 처리 할 수 있습니다. 결과를 보려면 값을 변경할 수 있습니다.
Main.java :
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class Main {
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(2);
List<Future<String>> lst = new ArrayList<Future<String>>();
for (int i = 0; i < 10; ++i) {
Callable<String> callable = new Calling();
Future<String> future = executorService.submit(callable);
lst.add(future);
}
int futureCount = 0;
for (Future<String> fut : lst) {
try {
futureCount++;
System.out.println("Processed call() in thread " + fut.get() + ", future number: " + futureCount);
} catch (Exception e) {
e.printStackTrace();
}
}
executorService.shutdown();
while (!executorService.isTerminated()) {
// wait, basically
}
System.out.println("Finished all threads!");
}
}
Calling.java
import java.util.concurrent.Callable;
public class Calling implements Callable<String> {
public Calling() {
}
public String call() throws InterruptedException {
System.out.println("Sleeping thread: " + Thread.currentThread().getName());
Thread.sleep(2000);
return Thread.currentThread().getName();
}
}
감사! 내 질문에 답한 것처럼 보입니다. –