Java-объекты, которые необходимо «очистить» или «закрыть» после использования, обычно реализуют интерфейс AutoCloseable
. Это облегчает очистку, используя try-with-resources . Класс Thread
не реализует AutoCloseable
и не имеет методов "close" или "dispose". Таким образом, вам не нужно выполнять какую-либо явную очистку.
Однако
(new Thread(this.runner)).start()
не гарантирует немедленного начала вычисления Runnable
. Возможно, вам все равно, удастся ли это сделать или не получится, но, думаю, вам все равно, работает ли он вообще. И вы можете захотеть ограничить количество этих задач, запущенных одновременно. Например, вы можете захотеть запустить только один. Таким образом, вы можете захотеть join()
потока (или, возможно, присоединиться с таймаутом ). Присоединение к потоку гарантирует, что поток завершит свои вычисления. Присоединение к потоку с таймаутом увеличивает вероятность того, что поток начнет свое вычисление (потому что текущий поток будет приостановлен, освобождая процессор, который может запустить другой поток).
Однако, создание нескольких потоков для выполнения обычных иличастые задачи не рекомендуется. Вместо этого вам следует отправить задач в пул потоков . Это позволит вам контролировать максимальный объем параллелизма и может предоставить вам другие преимущества (например, приоритизацию различных задач), а также амортизирует затраты на создание потоков .
. Вы можете настроитьпул потоков, чтобы использовать очередь задач фиксированной длины ( bounded ) и заставить отправлять потоки в самостоятельно выполнять отправленные задачи , когда очередь заполнена. Этим вы можете гарантировать, что задачи, переданные в пул потоков, (в конечном итоге) будут выполнены. Документация ThreadPool.execute(Runnable)
гласит:
Выполняет заданную задачу когда-нибудь в будущем
, что предполагает, что реализация гарантирует, что она в конечном итоге будетзапустите все отправленные задачи , даже если вы не выполните эти конкретные задачи, чтобы гарантировать выполнение отправленных задач.