public class TestExecutorPrintQQ {
public static void main(String[] args) {
ExecutorService executor= Executors.newSingleThreadExecutor();
executor.submit(()->{
try {
String qq=executor.submit(()->"2331725105").get();
} catch (Exception e) {
e.printStackTrace();
}
});
// executor.shutdown();
}
}
上面代码会发生死锁,因为线程池只有一个线程,在提交任务到线程池后,任务里面又提交了一个任务,所以只能把这个任务放到阻塞队列里面,因为get()方法是阻塞方法,会阻塞在这里等待结果,所以死锁
如果把最后的shutdown()去掉注释,则会拒绝任务,因为在第一个任务提交完成之后就关闭了线程池,此时还没有提交第二个任务,等到提交第二个任务的时候,发现线程池关闭了就会执行拒绝策略。