Почему Thread.stop()
устарел на Java? На их веб-сайте я вижу следующее:
Почему
Thread.stop
устарел?Потому что это по своей сути небезопасно. Остановка потока заставляет его разблокировать все мониторы, которые он заблокировал. (Мониторы разблокируются, так как исключение
ThreadDeath
распространяется на стек.) Если какой-либо из объектов, ранее защищенных этими мониторами, находился в несогласованном состоянии, другие потоки теперь могут просматривать эти объекты в несогласованном состоянии. Такие объекты, как говорят, повреждены. Когда потоки работают на поврежденных объектах, может возникнуть произвольное поведение. Такое поведение может быть тонким и трудным для обнаружения, или оно может быть выражено. В отличие от других исключенных исключений,ThreadDeath
убивает потоки молча; таким образом, пользователь не предупреждает, что его программа может быть повреждена. Коррупция может проявиться в любое время после фактического ущерба, даже в часы или дни в будущем.
Я не понимаю, что они подразумевают под "мониторами". Независимо от того, мой вопрос: если Thread.stop()
не следует вызывать, то как должен быть остановлен поток Java?