【并发】上山容易下山难-优雅停止线程


介绍

使用介绍:使用interrupt来通知,而不是强制:是用一个线程来通知另外一个线程停止,“通知”可以理解为,发出通知的线程可能“不了解”被通知线程业务,所以被通知线程会根据自身业务情况来判断是否停止。

最佳实践

1、如何正确停止线程

通常停止情况(无外界干涉的情况下)

	a. run方法正常结束,会停止
	b. 异常出现,方法中没有捕获也会停止

正确方法:用interrupt来请求停止线程

1、普通情况,线程中断(run方法内没有sleep或wait方法时的标准写法)
备注:1和2同时出现,线程才会停止,只出现1,线程默认不会停止。
在这里插入图片描述
2、线程可能被堵塞
在这里插入图片描述

3、如果线程在每次工作迭代(循环)之后都堵塞(调用sleep方法等)
在这里插入图片描述

	4、如果不这样写,会遇到的问题:线程无法停止
	5、实际生产开发时要注意的编码习惯:
		两种最佳处理方式
		以上这两种情况,分别代码演示,解释优点
	6、可以为了响应中断而抛出InterruptedException的常见方法列表总结

好处

2、错误停止的方法

被弃用的stop、suspend和resume方法
	使用stop的后果
	关于stop的一种错误理论
	suspend的问题
用volatile设置boolean标记位

3、停止线程相关的重要函数解析

中断线程
	interrupt方法原理
判断是否已中断
	static boolean interrupted()
	boolean isInterrupted()
	举例说明,注意Thread.interrupted()的目的对象是”当前线程“,而不管本方法

常见问题

如何停止线程
如果处理不可中断的阻塞(例如抢锁时ReentrantLock.lock()或者Socket I/O

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

女汉纸一枚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值