Вы не должны отправлять ветку исполнителю. Во-первых, это просто пустая трата времени, потому что единственный метод, который будет вызываться для него, это run()
, а вам просто нужно Runnable
и не нужно Thread
для этого.
Вторичный, хотя эта проблема решается в последней версии JDK, раньше возникала проблема утечки памяти, если вы создаете много объектов Thread
и не вызываете .start()
для них. По существу, создание Thread
объектов выделяет некоторую память, которую можно восстановить только после вызова .start()
. Поэтому выполнение executor.submit(thread)
потенциально опасно в более ранних JDK (я думаю, что это было решено только в JDK6 или около того).
Возвращаясь к вашему вопросу, executor.submit (thread) недопустим. Это просто неправильно, потому что исполнитель использует свой собственный поток для выполнения runnable. В этом и заключается весь смысл использования исполнителя. Вы хотите разделить задачу (вызов) и выполнение. Только если вы хотите указать исполнителя (нить), вы должны использовать Thread
, но это редко требуется. Обычно рекомендуется реализовать Runnable
и использовать исполнителей для его выполнения, а не иметь дело с Thread
самостоятельно.