线程的 suspend,stop不安全的地方,以及替代操作

stop:停止,直接停止线程的运行
为什么线程的stop方法被过期?因为它非常不安全,停止一个线程会导致他释放所有他持有的锁,而释放锁未导致很多临界的共享变量直接在一个不稳定的状态下呗其他线程操作,
你不知道线程运行到什么情况,根本无法控制什么时间点去停止一个线程。可能导致线程的某个临界区变量直接因为锁的释放,被其他线程开始操作,导致不一致的情况

替代方法:使用中断语句来操作


suspend:使暂停

resumed:恢复

最主要他会导致线程处于Runnable的状态,这点会导致错误的排查会很难


1.suppend导致占用的锁不会被释放,最明显的情况System.out.println这个看似没有锁的步骤,实际实现带啦是有加锁的过程,这也会导致这个锁也不会被释放。导致接下来其他的打印语句都不会被调用
2.suppend和resumed如果执行的顺序没有控制好,会导致先被恢复,再执行暂停,就会导致锁一直不被释放

替代方法:使用LockSupport工具类来暂停线程和恢复线程。关键字: park和unpark语句

LockSupport使用类似信号量的机制来解决这个问题:
unpark会导致信号量可用,这样即使先调用了unpark也会让park方法变得可用,不用担心先后的问题

park会导线线程处于waiting的状态,而且会标注是park导致的,而且还能支持中断的影响

转载于:https://my.oschina.net/payzheng/blog/701636

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值