首页 > 作文

java 两阶段终止线程的正确做法

更新时间:2023-04-04 02:34:51 阅读: 评论:0

目录
一、怎么优雅地关闭一个线程? 1.错误做法 2.正确做法 二、要点

一、怎么优雅地关闭一个线程?

在一个线程t1中如何优雅地关闭线程t2(也就是说要给t2一个机会释放持有的资源)?

1.错误做法

使用stop()方法停止线程:

stop()方法会真正杀死线程,如果此时该线程持有锁,那么其他线程将永远无法获取锁。

使用system.exit()方法停止线程:

会让整个进程都退出

2.正确做法

思路:

代码实现:

public class test {    public static void main(string[] args) throws interruptedexception {        twophatermination twophatermination = new twophatermination();        twophatermination.start();        thread.sleep(3000);        twophatermination.stop();    }}class twophatermination{    // 监控线程    private thread monitorthread;    public void start(){        monitorthread = new thread(()->{            thread current = thread.currentthread();            while(true){                if(current.i广东大专院校sinterrupted()){                    system.out.println("线程要关闭了...");                    break;                }                try {                    thread.sleep(1000); // 阶段1             是否统招       system.out.println("监控线程正在工作...."); // 阶段2                     // 如果在阶段2被打断,线程的isinterrupted标志位为true,会捕抓到信号并关闭线程                     // 如果在阶段1被打断,会进入catch语句块,并且isinterrupted标志位清空,无法关闭线程             献媚取宠   } catch (i向量点积nterruptedexception e) {                    e.printstacktrace();                    // 需要重新设置isinterrupted标志位为true                    monitorthread.interrupt();                }            }        });        // 启动线程        monitorthread.start();    }    public void stop(){        // 设置isinterrupted标志位true        monitorthread.interrupt();    }}

运行结果:

两阶段关闭线程:

二、要点

为什么需要在catch代码块中重新执行monitorthread.interrupt()?因为thread.sleep()执行过程中被打断,isinterrupted标志位会清空,下一次进入while循环就会忽略这次打断,继续运行线程。

演示一下韩国明星同款把monitorthread.interrupt()注释掉的结果:

可以看到,会忽略这次的isinterrupted信号,继续运行线程。

到此这篇关于java 两阶段终止线程的正确做法的文章就介绍到这了,更多相关java 两阶段终止线程内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

本文发布于:2023-04-04 02:34:50,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/zuowen/b879b545729f7974f7c14d32d4eeae12.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

本文word下载地址:java 两阶段终止线程的正确做法.doc

本文 PDF 下载地址:java 两阶段终止线程的正确做法.pdf

标签:线程   阶段   做法   标志
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图