Поведение, практически ничего.
Однако, имея экземпляр исполнителя
, вы можете отправить ему несколько заданий, и они будут выполняться одно за другим. Вы не можете сделать это просто с помощью необработанной Темы
.
Может быть много различий, но я покажу Вам одно различие, которое я нашел очень важным для понимания:
public void sendEventSingleThreadExecutor(Event e){
Executor.singleThreadExecutor().execute(()->{//send the event here})
}
Теперь, даже если Вы вызов sendEventSingleThreadExecutor метод 10 раз , это будет использовать только единственный поток для отправки их. Это не создаст новый поток каждый раз. Что означает, что события будут отправлены последовательно или синхронно ! Можно читать больше от здесь :
Теперь видят ниже примера с новым потоком
public void sendEventThread(Event e){
Thread(//send the event here).start();
}
, Если Вы вызов это 10 раз , он создаст 10 новых потоков . Что означает, выполнение будет асинхронное ! И это могло быть опасно , это может создать много потоков в зависимости от того, сколько раз Вы вызываете функции sendEventThread.
Обратите внимание на то, что, код только для демонстрационной цели, он мог бы иметь синтаксическую ошибку! , Если Вы находите какое-либо неправильное описание здесь, я буду рад быть исправленным.
еще Некоторая информация от здесь
newSingleThreadExecutor. Однопоточный исполнитель создает единственный рабочий поток для обработки задач, заменяя его, если это неожиданно умирает. Задачи, как гарантируют, будут обработаны последовательно согласно порядку, наложенному очередью задачи (FIFO, LIFO, первоочередной заказ). [4]
[4] Однопоточные исполнители также обеспечивают достаточную внутреннюю синхронизацию, чтобы гарантировать, что любые записи памяти, сделанные задачами, видимы к последующим задачам; это означает, что объекты могут быть безопасно ограничены “task thread” даже при том, что тот поток может время от времени заменяться другим.
Одно из заметных отличий: когда вы запускаете new Thread(someRunnable).start();
, когда runnable завершается, поток тихо умирает.
Исполнитель, однако, будет продолжать работать до тех пор, пока вы его не выключите. Поэтому при выполнении Executors.newSingleThreadExecutor().execution(command)
Когда вы думаете, что ваше приложение или JVM может быть завершено, Исполнитель все равно может быть запущен в фоновом потоке.
С помощью Executor.execution
, если в Executor
будет брошена ошибка Error
или RuntimeException
, она будет бесшумно проглочена, а new Thread()
распечатана на System.err
.