两个线程交替打印奇偶数的问题,打印第一个偶数之后程序就卡死了,不会再继续运行
来源:7-7 交替打印

慕函数2416174
2019-12-22
package threadobjectcommonsmethod;
public class WaitNotifyPrintOddEveWait {
static volatile int count = 0;
static final Object lock = new Object();
public static void main(String[] args) throws InterruptedException {
Runnable odd = () -> {
synchronized (lock){
try {
while(count <= 100 && count%2 == 0){
System.out.println(“偶数线程打印:”+count++);
lock.notify();
if(count <= 100){
lock.wait();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
Runnable even = () -> {
synchronized (lock) {
try {
while(count <= 100 && count%2 == 1){
System.out.println(“奇数线程打印:”+count++);
lock.notify();
if(count <= 100){
lock.wait();
}
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
};
new Thread(even).start();
new Thread(odd).start();
}
}
如果改变两个线程的启动顺序,就不会出现这个问题,搞不明白了,求老师解答
2回答
-
你打印奇数的线程先运行,然后判断while (count <= 100 && count % 2 == 1) ,当然,条件不满足,因为count还是0,然后while就跳过了,然后打印奇数的线程就永远运行完毕了,所以
打印第一个偶数之后程序就卡死了
00 -
慕函数2416174
提问者
2019-12-23
?我这个脑子,谢谢老师
00
相似问题