线程终止操作

关于线程的终止,我们有两种方法来实现

1.使用一个标志位 

private static boolean flag = true;

    public static void main(String[] args) throws InterruptedException {
        Thread t1 = new Thread(() -> {
            while (flag) {
                System.out.println("你好");
            }
        });
        //t.start();
        t1.start();
        Thread.sleep(2000);
        flag = false;
    }

细节:为什么这个变量需要定义在类中方法外,且为static呢?

原因:使用lambda表达式时,会触发变量捕获,表达式内的变量都不允许发生改变,所以要在类中方法外定义

关于static:静态区的属性存储在静态区 类中的变量存储在栈上 故static修饰的变量不会受此影响(本人猜测,如有不妥,还请更正)


2.使用isInterrupted()方法

使用interrupt方法可以将线程中的isInterrupted()标志位变成true

重点:当终止线程时,线程刚好在休眠状态,那么此时会有两个变化

           1.线程即刻被唤醒

           2.触发sleep内部的异常,程序不会终止, 且将isInterrupted()标志位变成false

将标志位重新变成false意味着什么呢?

意味着此线程即使报出了异常,但还是依然继续允许,且接下来需要怎么操作,如何操作,都是由程序员代码实现的

1.请求被忽略

2.线程t马上响应终止请求

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值