线程知识学习四(线程的“结束”)

线程结束

结束线程的方法:
1、自然结束
2、stop(),suspend(),resume()
3、volatile标志
1、不适合某些场景(比如还没有同步的时候,线程做了阻塞操作,没有办法循环回去)
2、打断时间也不是特别精确,比如一个阻塞容器,容量位5的时候结束生产者,但是,由于volatile同步线程标志位的时间控制不是很精确,有可能生产者害继续生产一段时间。
4、interrupt和isinterrupted(比较优雅)

1、 使用stop方法

不建议使用:
容易产生数据不一致的问题(直接把腿打折),会二话不说释放掉所有的锁,并且不会做任何善后的工作,比如说要通过锁来保证某一个业务数据的一致性,将a改为3,再将b改为4,但是在刚将3设置完了还没有设置b等于4的时候直接调用当前线程的stop方法,那么当前线程再释放出锁,其它线程拿到锁去执行其它线程对应的业务,这样就不能保证数据的一致性了。

2、Suspend and Resume

不建议使用:
如果暂停的时候是持有一把锁的,那么这个锁是不会被释放的,如果后面忘了让它继续的话,那么这把锁是永远都不会被释放的(产生数据不一致问题及死锁问题)。

3、Volatile Flag

用Volatile修饰的变量来标志线程是否结束,但是不能保证精确线程里面循环的次数,只要不依赖循环的次数及中间状态那么这是比较优雅的一种结束方式(wait(会阻塞在那不进入下次循环), recv,accept不适合使用)。

4、interrupt(设置标志位【更优雅】)

wait和sleep可以用InterruptException去捕获异常处理业务来正确的结束线程,但是很难精确的控制循环在哪结束,这时要控制协调打断的线程及里面操作的线程。

如果不依赖于中间精确的次数或者精确的时间,interrupt和volatile都是很不错的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值