Есть ли способ использовать ExecutorService для приостановки/возобновления определенного потока?
private static ExecutorService threadpool = Executors.newFixedThreadPool(5);
Представьте, что я хочу остановить поток с идентификатором = 0 (при условии, что каждому из них назначается инкрементный идентификатор до тех пор, пока не будет достигнут размер пула потоков).
Через некоторое время, скажем, нажав кнопку, я хочу возобновить этот конкретный поток и оставить все остальные потоки с их текущим статусом, который можно приостановить или возобновить.
Я нашел в документации по Java незавершенную версию PausableThreadPoolExecutor. Но это не соответствует тому, что мне нужно, потому что возобновляет все потоки в пуле.
Если нет способа сделать это с реализацией ExecutorService по умолчанию, может ли кто-нибудь указать мне на реализацию Java для этой проблемы?
InterruptableTask
, и, поскольку они не являются общими,lock
является частным для каждого потока. 12.08.2012o
, действующий какlock
, не распределяется между потоками. 12.08.2012suspended
, а затем попытаетесь завершить работу приложения, JVM не остановится, поскольку поток заблокирован вwait
. Вы должны либо сделать потоки демонами, либо реализовать то, что вам действительно нужно. внимательно 12.08.2012MUST
всегда вызываетеwait
внутри циклаwhile
, чтобы избежать ложных пробуждений docs.oracle.com/javase/6/docs/api/java/lang/Object.html#wait() 12.08.2012threadPool.shutdownNow();
, все потоки, находящиеся вwait()
, будут прерваны. Так почему же JVM не останавливает выполнение при вызовеshutdownNow()
? 12.08.2012shutdown
изящно закрывает пул потоков, оставляя текущие запущенные задачи для выполнения, а ожидающие задачи могут быть завершены.shutdownNow
отменяет все (возвращает список всех незапущенных задач) и резко выключается 13.08.2012shutdownNow
ничего не отменяет, он только пытается это сделать, но не гарантирует, что что-то отключит. Если задачу нельзя прервать, она будет продолжать выполняться. 04.09.2019