线程的终止的4种方式

1:正常的运行结束
指线程体执行完成,线程自动退出。
2.使用退出标志进行退出
在一般情况下我们都是等待线程中run方法完全执行完成之后线程终止,其实在很多场景下我们需要强制将线程进行终止,所以我在这里插入代码片们可以使用一些自定义的标识或者方法进行中断,上代码:

 new Thread(new Runnable() {
            private volatile boolean exit=false;
            @Override
            public void run() {
                while(!exit){
                    //执行业务逻辑
                }
            }
        }).start();

补充:在这里我们使用到了volatile ,这是一个轻量级的同步机制对于变量,了解JMM(java内存模型)的同学都知道在java中对数据进行读取和操作都是和内存进行打交道,所以如果cpu运行太快而存读取和操作速率很快的时候,直接和内存打交道就显得很慢,于是我们在线程和内存之间存在了一个CPU的高速缓存,这些我们交流起来就很快了,但是同衍生出一个问题,缓存和主存数据一致性问题,一般而言 如果只有是共享变量才会出现数据一致性问题 所以在此时我们可以引入锁得机制,让我们的变量再进行操作时进行安全同步,这样我们的数据就不会出现混乱的问题,这里就解释这么多。

回到主题上来,我们这里使用到的exit 在进行判断是否执行我们的业务操作,如果不需要了就直接设置为true,直接跳出循环,结束线程。

3.使用Interrupt方法终止线程
在使用interrupt方法之前,我们要了解到 Interrupt ,Interrupted,IsInterrupted这三者的区别
其实这很好辨识:
Interrupt方法时将线程的中断标识进行改变,并不会改变线程的自身状态,这还要等待接收中断标识的程序的最终处理来进行判读。
isInterrupted只是一个判断是否为中断状态的方法,Interrupted是一个可以操作和清除中断标识的方法
所以在实际中我们要想中断线程有两种情况。
1)线程处于阻塞状态:当线程处于sleep ,wait,或者join方法 为阻塞状态时,再调用interrupt方法,会抛出异常,然后通过break跳出状态检测的一个循环,就可以结束这个线程。
2)线程处于为阻塞状态时,使用isterrupted方法判断线程中止标志,在调用interrupt方法,中断标识会被设置为true,并不能立刻退出线程,而是等待资源释放后再推出。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值