LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

【C#】4种方法优雅的关闭线程Thread

admin
2024年3月31日 1:6 本文热度 592

其实现在已经很少会单独用Thread开启一个线程任务了,剩下还有一些情况,比如说单独开启一个线程读取数据库数据,然后把读到的数据提交到线程池中处理。

一般来说会这样处理:

new Thread(()->{
while(true){
//访问数据库,读取数据
//更新这部分数据的状态,保证下次不再读到
//间隔1s
}
}).start();

那什么情况下需要关闭线程呢,当然是我不想再处理任务的时候了。Thread有提供stop方法,但是由于不安全,已经被弃用了。

方式一:让任务执行完毕

这可不是开玩笑,Thread任务执行完毕,自己就关闭了,不需要特地去关。

方式二:volatile控制boolean关闭

当run方法中式while(true)循环的时候就需要通过boolean标志去控制了。

static volatile boolean runFlag;
new Thread(()->{
while(true){
//访问数据库,读取数据
//更新这部分数据的状态,保证下次不再读到
//间隔1s
if(runFlag){
break;
}
}
}).start();

方式三:AtomicBoolean控制关闭

同样地,也可以用AtomicBoolean去控制。

static AtomicBoolean runFlag = new AtomicBoolean(false);
new Thread(()->{
while(true){
//访问数据库,读取数据
//更新这部分数据的状态,保证下次不再读到
//间隔1s
if(runFlag.get()){
break;
}
}
}).start();
runFlag.set(true)

方式四:通过interrupt()方法

Thread自带interrupt()方法,可以发送一个中断请求,通过isInterrupted()来判断是否中断。

Thread t1 = new Thread(() -> {
    while (true) {
        System.out.println("111111111111111111111");
        if (Thread.currentThread().isInterrupted()) {
            break;
        }
    }
});
t1.start();
TimeUnit.SECONDS.sleep(3);
new Thread(()->{
    t1.interrupt();
}).start();

由此有了4种方法中断线程。


该文章在 2024/3/31 1:07:06 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2024 ClickSun All Rights Reserved