Мне просто интересно объяснение того, как этот код работает
предположим, что у нас есть Работа класс ниже
public class Work {
private static ThreadPoolExecutor executorService;
private Work(){};
public static void instansiate(int numberOfThread){
executorService= (ThreadPoolExecutor) Executors.newFixedThreadPool(numberOfThread);
}
public static void shutDown(){
executorService.shutdown();
}
public static ExecutorService getExecutorService() {
return executorService;
}
public static int getThreadCount(){
return executorService.getCorePoolSize();
}
}
и я вызываю этот класс где-то в методе, как ниже
public static void xx() throws ExecutionException, InterruptedException {
Work.instansiate(2);
System.out.println("Thread count= " + Work.getThreadCount());
ExecutorService executorService = Work.getExecutorService();
Future<String> future1 = executorService.submit(new Callable<String>() {
@Override
public String call() throws Exception {
return "future1";
}
});
String resFuture1 = future1.get();
System.out.println(resFuture1);
Work.shutDown();
Future<String> future2 = executorService.submit(new Callable<String>() {
@Override
public String call() throws Exception {
return "future2";
}
});
String resFuture2 = future2.get();
System.out.println(resFuture2);
}
Этот код вызывает исключение после строки Work.shutDown () и говорит, что отклонено из java .util.concurrent. ThreadPoolExecutor@234bef66 [Завершено, размер пула = 0 , активные потоки = 0 ...
Я назначил Work.getExecutorService другому executorService, как закрытие Работа executorservice может заблокировать назначенный один.