4
나는 호출 가능한 인터페이스 병렬을 실행할 수있는 내 자신의 스레드 풀과 장래의 개체를 만들고 있습니다. Executor는 종료 메소드를 제공하여 모든 작업자 스레드가 실행되지 않도록합니다. 아래 스레드 풀을 만드는 경우 모든 스레드가 실행을 마친 후 어떻게 종료 방법을 구현해야합니까?executorService 종료 메서드를 재정의하는 방법
내 사용자 지정 스레드 풀 내가 스레드의 목록을 유지하는 방법을 생각하고 유휴 또는하지 않을 경우 다음 확인을 couldnt this
class MyThreadPool implements java.util.concurrent.Executor
{
private final java.util.concurrent.BlockingQueue<Callable> queue;
public MyThreadPool(int numThreads) {
queue = new java.util.concurrent.LinkedBlockingQueue<>();
for (int i=0 ; i<numThreads ; i++) {
new Thread(new Runnable(){
@Override
public void run() {
while(true) {
queue.take().call();
}
}
}).start();
}
}
@Override
public <T> Future<T> submit(Callable<T> callable) {
FutureTask<T> future = new FutureTask(callable);
queue.put(future);
return future;
}
public void shutdown(){ }
}
처럼 보인다?
나는이 일을 시도했지만 여전히 스레드는 내가 그것을 따라서 큐에서 호출 복용에 대한 조건을 기다려 스레드가 becuause 이유는 beileve – krs8888
을 실행하는 것 같다 종료되지 않습니다. 내가 틀렸다면 나를 바로 잡습니다. – krs8888
예, 대기열을 폴링하고 싶지는 않지만 작동합니다. 그러나 나는 셧다운 방법에서 독약 사용법을 사용했다. 내가 한 일은 종료 메서드에서 대기열에 포이즌 개체가 추가 된 것입니다. 대기열에서 가져 와서 독이 있는지 확인합니다. 그렇다면 루프 밖으로 빠져 나옵니다 – krs8888