为什么java线程不推荐调用stop,suspend,resume方法

一、stop

    stop方法不推荐调用,官方说发是“可能发生不可预测的问题”。其实线程在调用stop方法后,会停止自己。线程停止的时候,会直接停止执行,并释放自己正在使用的锁资源。问题出在这里,如果线程拿到锁,只执行了几步,还剩几步没有执行完,如果此时释放锁,其他线程重新接管,可能导致线程不安全的事情发生。并且这种问题几乎无法Debug。

二、suspend和resume方法

    这两个方法必须要成对出现,否则非常容易发生死锁,因为suspend方法并不会释放锁。如果不能保证之后会有人调用resume方法,会导致线程永远挂起。其次,suspend和resume方法通常不一定是一个线程来顺序执行。有可能一个线程来suspend另一个线程来resume,而如果没有处理好线程间的调用顺序,非常可能发生,resume发生在suspend之前,这样又会导致线程suspend之后,永远没有人来resume他,发生“线程冻结”的场景。

相关文章
相关标签/搜索
每日一句
    每一个你不满意的现在,都有一个你没有努力的曾经。
本站公众号
   欢迎关注本站公众号,获取更多程序园信息
开发小院