大佬指导!如何在线程B中关闭线程A?

线程A是一个while循环的线程,线程B的代码是这样

System.out.println("close");

System.out.println(ThreadA.isAlive());

if(ThreadA.isAlive()) {

    System.out.println("*" + ThreadA.isInterrupted());

    ThreadA.interrupt();

}

System.out.println(ThreadA.isAlive());

然后执行结果是这样的。。。

线程结束用thread.stop(tread你的线程名)线程的话,一般都是尽量让他执行结束,写个方法让他结束,或者让他挂起,尽量少用直接结束,因为直接结束可能会引起不可估量的错误。

一般的做法是设置一个flag,一个public的赋值函数

外部线程给运行线程的flag赋值,
资源下载运行线程在内部循环中,先判断flag值,为ture则退出

你的A线程是怎么while循环的?
是while(!isInterrupted()) 循环吗?还是while(true)循环?是while(true)的话,你是怎么控制break的?

是while(true)这种,参数是一个全局变量。。。我发现问题好像出在是同时运行了2个线程A,其中一个线程达成条件把全局变量置为false后,其他的线程不能正常退出

那请问一下,我把这个flag设置成全局变量,然后两个线程A都以这个flag为条件进行循环,怎么在当其中一个线程把flag置为false后另一个线程立刻结束。。。

都使用while(flag)循环  ,会把循环体内的代码执行完停止

设置全局的不行,线程还是会读旧值,得volatile一下

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值