2010-06-07 7 views
2

У меня возникла проблема с потоком. У меня есть класс, который реализует runnable, и я могу использовать метод thread.start() для этого класса. Мой вопрос у меня есть еще один класс java.util.concurrent.ExecutorService, в которых я могу назвать executor.submit (нить) ..разница между thread.start() и executor.submit (thread)

может кто-нибудь пожалуйста, скажите мне, в чем разница между thread.start() и executor.submit(thread) ...

ответ

4

исполнителя. submit метод принимает Runnable, а не Thread. Точка executorServices заключается в том, что они берут контроль над созданием и объединением потоков, поэтому коду, вызывающему их, не нужно.

1

Вы не должны направлять тему исполнителю. Сначала это просто отходы, потому что единственный метод, который будет называться, это run(), и вам просто нужен Runnable и для этого не нужен Thread.

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

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

Смежные вопросы