关于一个多线程DEMO,Interrupt后是否会再次发生死锁
深度学习模型设计的方法和技巧 设计神经网络模型是一个迭代的过程,需要不断试验和调整各个组成部分,以达到最佳性能。同时,遵循良好的工程实践,如模块化设计、版本控制、文档记录等,也是成功的关键。 阅读详情
该多线程DEMO如下,
问题在于主线程中的
这个代码段如果把t1 interrupt后,假如CPU立刻给它执行权,那么此时主线程尚未将flag置为false,这时t1执行完毕后判断flag为true,又进入阻塞,同理t2也可能这样,那么st.changeFlag()是不是就没什么意义了?但是我昨晚试了很多遍都是一个三个线程顺利结束,无法出现t1或t2等待的状态,请问我考虑的情况到底会发生么?
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等待的状态,请问我考虑的情况到底会发生么?
...全文


Java SE
