关于一个多线程DEMO,Interrupt后是否会再次发生死锁

明月镇魂 明月镇魂 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
该多线程DEMO如下,
package cn.haiyisoft18;

public class ThreadStopDemo {

public static void main(String[] args) {
// TODO Auto-generated method stub
StopThread st = new StopThread();
Thread t1 = new Thread(st);
Thread t2 = new Thread(st);
t1.start();
t2.start();
for (int i = 1; i <= 50; i++) {
if (i == 40) {
t1.interrupt();
t2.interrupt();
st.changeFlag();
}

System.out.println("MAIN----" + i);
}

System.out.println("MAIN------" + "OVER");

}

}

class StopThread implements Runnable {
private boolean flag = true;

@Override
public synchronized void run() {
// TODO Auto-generated method stub
while (flag) {
try {

wait();

} catch (InterruptedException ie) {
// TODO: handle exception
System.out.println(Thread.currentThread().getName() + "-----" + ie.toString());
}

System.out.println(Thread.currentThread().getName() + "------" + "hello");
}
}

public void changeFlag() {
this.flag = false;
}

}


问题在于主线程中的
for (int i = 1; i <= 50; i++) {
if (i == 40) {
t1.interrupt();
t2.interrupt();
st.changeFlag();
}


这个代码段如果把t1 interrupt后,假如CPU立刻给它执行权,那么此时主线程尚未将flag置为false,这时t1执行完毕后判断flag为true,又进入阻塞,同理t2也可能这样,那么st.changeFlag()是不是就没什么意义了?但是我昨晚试了很多遍都是一个三个线程顺利结束,无法出现t1或t2等待的状态,请问我考虑的情况到底会发生么?
...全文

相关推荐

评论 3
收藏 已收藏
分享
返回顶部
明月镇魂
Java SE 62,620 成员 307,251 内容