예외 처리를 제대로 구현하지 않은 경우 ExeuctorService에 작업을 제출하는 방식에 따라 스레드가 중단됩니다.
FixedThreadPool
을 사용하고 있기 때문에 고정 된 수의 스레드가 스레드가 없어지면 유지해야합니다.
submit 대신 execute을 사용하면 처리되지 않은 예외가 발생할 경우 스레드가 죽습니다.
샘플 코드는 execute()
수입하고있는 java.util.concurrent를 사용하여 예외 & 스레드 죽음을 시뮬레이션. *;
import java.util.*;
public class ThreadDeath{
public ThreadDeath()
{
System.out.println("creating service");
ExecutorService service = Executors.newFixedThreadPool(2);
for (int i=0; i < 5; i++){
service.execute(new Runnable(){
public void run(){
int a=4, b = 0;
System.out.println("Thread Name before divide by zero:"+Thread.currentThread().getName());
System.out.println("a and b="+a+":"+b);
System.out.println("a/b:"+(a/b));
}
});
}
service.shutdown();
}
public static void main(String args[]){
ThreadDeath test = new ThreadDeath();
}
}
이제 출력 스레드 이름을 확인하십시오
이
creating service
Thread Name before divide by zero:pool-1-thread-1
Thread Name before divide by zero:pool-1-thread-2
a and b=4:0
a and b=4:0
Exception in thread "pool-1-thread-1" Thread Name before divide by zero:pool-1-thread-3Exception in thread "pool-1-thread-2"
a and b=4:0
Thread Name before divide by zero:pool-1-thread-4
Exception in thread "pool-1-thread-3" a and b=4:0java.lang.ArithmeticException:/by zero
Thread Name before divide by zero:pool-1-thread-5
지금 바로 submit
와 execute
를 교체 Runnable
작업을 제출하면서. 예외는 삼켜 출력이 같다됩니다
private boolean addWorker(Runnable firstTask, boolean core)
이
grepcode 링크를 참조, 스레드 생성에 대한 자세한 내용은
creating service
Thread Name before divide by zero:pool-1-thread-1
a and b=4:0
Thread Name before divide by zero:pool-1-thread-2
a and b=4:0
Thread Name before divide by zero:pool-1-thread-1
a and b=4:0
Thread Name before divide by zero:pool-1-thread-2
Thread Name before divide by zero:pool-1-thread-1
a and b=4:0
a and b=4:0
(FixedThreadPool 크기가 2이기 때문에 당신은 두 개의 스레드를 볼 수 있습니다)
질문이 없으므로 답을 찾아야합니다. 청결하고 완벽한 팁이 필요합니다. – BinaryProbe
submit() 메서드를 사용하여 예외를 잡기 위해 관련 SE 질문을 확인할 수 있습니다. http://stackoverflow.com/questions/3929342/choose-between-executorservices-submit-and-executorservices-execute/35424481#35424481 –