请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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就跳过了,然后打印奇数的线程就永远运行完毕了,所以

打印第一个偶数之后程序就卡死了


0 回复 有任何疑惑可以回复我~
提问者 慕函数2416174 2019-12-23 07:20:36

?我这个脑子,谢谢老师

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信