课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
线程是程序员在学习java编程开发语言需要重点掌握的一个编程知识,而今天我们通过案例分析来了解一下,线程中断与线程终止的区别。
1、什么是线程中断?
线程中断是线程的标志位属性。而不是真正终止线程,和线程的状态无关。线程中断过程表示一个运行中的线程,通过其他线程调用了该线程的interrupt()方法,使得该线程中断标志位属性改变。
深入思考下,线程中断不是去中断了线程,恰恰是用来通知该线程应该被中断了。具体是一个标志位属性,到底该线程生命周期是去终止,还是继续运行,由线程根据标志位属性自行处理。
线程中断,不是停止线程,只是一个线程的标志位属性
如果线程状态为被阻塞状态(sleep、wait、join等状态),线程状态退出被阻塞状态,抛出异常InterruptedException,并重置中断状态为默认状态false
如果线程状态为运行状态,线程状态不变,继续运行,中断状态置为true
2、线程终止
比如在IDEA中强制关闭程序,立即停止程序,不给程序释放资源等操作,肯定是不正确的。线程终止也存在类似的问题,所以需要考虑如何终止线程?
上面聊到了线程中断,可以利用线程中断标志位属性来安全终止线程。同理也可以使用boolean变量来控制是否需要终止线程。
线程成员变量on通过volatile关键字修饰,达到线程之间可见,从而实现线程的终止。但当线程状态为被阻塞状态(sleep、wait、join等状态)时,对成员变量操作也阻塞,进而无法执行安全终止线程
为了处理上面的问题,引入了isInterrupted();只去解决阻塞状态下的线程安全终止。
两者结合是真的没问题了吗?不是的,如果是网络io阻塞,比如一个websocket一直再等待响应,那么直接使用底层的close。
希望这辈子,最让你无悔的事情就是来达内学习!学习向来不是件易事,但无论过程多么艰难,希望你依然热爱生活,热爱学习!永远记得,达内将与你一同前行!现在扫码,立即领取万元课程礼包,助力0基础快速入行,为你梳理行业必备技能,全方位了解岗位发展前景!
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。