求教,如何在线程B中关闭线程A

Cykapunk 2020 2020-04-30 07:37:15
线程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());

然后执行结果是这样的。。。
...全文
280 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
imiMi_ 2020-05-06
  • 打赏
  • 举报
回复
设置全局的不行,线程还是会读旧值,得volatile一下
tianfang 2020-05-04
  • 打赏
  • 举报
回复
都使用while(flag)循环 ,会把循环体内的代码执行完停止
Cykapunk 2020 2020-05-04
  • 打赏
  • 举报
回复
引用 2 楼 tianfang的回复:
一般的做法是设置一个flag,一个public的赋值函数 外部线程给运行线程的flag赋值,运行线程在内部循环中,先判断flag值,为ture则退出
那请问一下,我把这个flag设置成全局变量,然后两个线程A都以这个flag为条件进行循环,怎么在当其中一个线程把flag置为false后另一个线程立刻结束。。。
Cykapunk 2020 2020-05-04
  • 打赏
  • 举报
回复
引用 3 楼 qybao的回复:
你的A线程是怎么while循环的?
是while(!isInterrupted()) 循环吗?还是while(true)循环?是while(true)的话,你是怎么控制break的?
是while(true)这种,参数是一个全局变量。。。我发现问题好像出在是同时运行了2个线程A,其中一个线程达成条件把全局变量置为false后,其他的线程不能正常退出
qybao 2020-05-01
  • 打赏
  • 举报
回复
你的A线程是怎么while循环的?
是while(!isInterrupted()) 循环吗?还是while(true)循环?是while(true)的话,你是怎么控制break的?
tianfang 2020-05-01
  • 打赏
  • 举报
回复
一般的做法是设置一个flag,一个public的赋值函数 外部线程给运行线程的flag赋值,运行线程在内部循环中,先判断flag值,为ture则退出
wildcata 2020-05-01
  • 打赏
  • 举报
回复
线程结束用thread.stop(tread你的线程名)线程的话,一般都是尽量让他执行结束,写个方法让他结束,或者让他挂起,尽量少用直接结束,因为直接结束可能会引起不可估量的错误。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧