То, что вы пытаетесь сделать, это эмулировать устаревшую функциональность из более старых java версий. Тогда можно было остановить, приостановить или возобновить Thread
. Но из javado c из Thread.stop
:
Этот метод небезопасен по своей природе. Остановка потока с помощью Thread.stop заставляет его разблокировать все заблокированные мониторы (как естественное следствие неконтролируемого исключения ThreadDeath, распространяющегося вверх по стеку). Если какой-либо из объектов, ранее защищенных этими мониторами, находился в несогласованном состоянии, поврежденные объекты становятся видимыми для других потоков, что может привести к произвольному поведению. Многие варианты использования stop должны быть заменены кодом, который просто изменяет некоторую переменную, чтобы указать, что целевой поток должен прекратить работу. Целевой поток должен регулярно проверять эту переменную и упорядоченно возвращаться из своего метода run, если переменная указывает, что она должна прекратить работу. Если целевой поток ожидает в течение длительных периодов (например, для переменной условия), для прерывания ожидания следует использовать метод прерывания.
Как описано в этом выводе, риски выполнения того, что вы хочу, чтобы они были критически важны, и поэтому это поведение устарело.
Я хотел бы предложить, чтобы вместо попытки заставить запущенный поток в какую-то остановочную позицию извне, вам, возможно, следует подумать о API ThreadPool, который позволяет вам правильно упаковать сегменты кода, чтобы их состояние могло быть выгружено из потока, а затем возобновлено. например, создать Ticket
, который будет элементарным заданием, которое поток всегда будет выполнять перед началом другого, TicketChain
, который последовательно соединяет заявки и сохраняет состояние. Затем создайте обработчик, который обрабатывает заявки по очереди. Если Билет в настоящее время не может быть выполнен (например, из-за того, что не все данные присутствуют или какая-либо блокировка не может быть получена), поток может пропустить его до более позднего момента времени, когда указанные условия могут быть истинными.