Я пытаюсь написать программу, которая будет делить работу среди нескольких рабочих потоков java. Проблема в том, что когда я запускаю его из командной строки, он никогда не возвращается. Я не возвращаю свое приглашение и, в конце концов, должен закрыть ctrl-c.Приложение Java, которое использует ExecutorService, никогда не закрывается
я упростил его к следующему тривиальному случаю
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class TestExeServ {
private class ExpensiveTask implements Callable<Integer>{
private final String msg;
public ExpensiveTask(String str){
this.msg = str;
}
@Override
public Integer call() {
System.out.println("My message was " + msg);
return 1;
}
}
private void run()
{
final ExecutorService exeServ = Executors.newFixedThreadPool(2);
Future<Integer> result = exeServ.submit(new ExpensiveTask("Hello!"));
try {
System.out.println(" Task is done, it returned " + result.get());
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String args[])
{
System.out.println("Start");
TestExeServ tes = new TestExeServ();
tes.run();
System.out.println("Done");
}
}
Выход этой программы
[email protected]:/local/mnt/workspace/TestExeServ/bin$ java TestExeServ
Start
my message was Hello!
Task is done, it returned 1
done
И это все. Он там висит. Нет подсказки. Если я удалю строку ExecutorService.submit, я получаю
[email protected]:/local/mnt/workspace/TestExeServ/bin$ java TestExeServ
Start
done
[email protected]:/local/mnt/workspace/TestExeServ/bin$
Программа закрывается естественным образом.
Есть ли какая-то задача очистки, которую я должен выполнять в ExecutorService, что я не делаю правильно? Я предположил, что вызов .get() соединяет потоки. Разве это не так?
Вам необходимо выключить Executor –
Или использовать фабрику нитей, которая создает потоки демона. – assylias
или установить флаг allowCoreThreadTimeout [приложение ThreadPoolExecutor не завершено] (http://stackoverflow.com/q/30633698/217324) –