为何不赞成使用Thread.stopsuspend和resume.docxVIP

  • 5
  • 0
  • 约5.92千字
  • 约 6页
  • 2017-12-20 发布于河南
  • 举报

为何不赞成使用Thread.stopsuspend和resume.docx

为何不赞成使用Thread.stopsuspend和resume

为什么Thread.stop被废弃了?因为其天生是不安全的。停止一个线程会导致其解锁其上被锁定的所有监视器(监视器以在栈顶产生ThreadDeath异常的方式被解锁)。如果之前被这些监视器保护的任何对象处于不一致状态,其它线程看到的这些对象就会处于不一致状态。这种对象被称为受损的(damaged)。当线程在受损的对象上进行操作时,会导致任意行为。这种行为可能微妙且难以检测,也可能会比较明显。不像其他未受检的(unchecked)异常,ThreadDeath悄无声息的杀死及其他线程。因此,用户得不到程序可能会崩溃的警告。崩溃会在真正破坏发生后的任意时刻显现,甚至在数小时或数天之后。难道我不能仅捕获ThreadDeath异常来修正受损对象吗?理论上,也许可以,但书写正确的多线程代码的任务将极其复杂。由于两方面的原因,这一任务的将几乎不可能完成:线程可以在几乎任何地方抛出ThreadDeath异常。由于这一点,所有的同步方法和(代码)块将必须被考虑得事无巨细。线程在清理第一个ThreadDeath异常的时候(在catch或finally语句中),可能会抛出第二个。清理工作将不得不重复直到到其成功。保障这一点的代码将会很复杂。Thread.stop(Throwable)会有什么问题?除了上述所有问题外,此方法还可能产生其目标线程不准备处理的异常(包括若非为实现此方法,线程不太可能抛出的受检

文档评论(0)

1亿VIP精品文档

相关文档