Java线程wait()和notify()相关问题
@Test
public void printTakeTurns() {
final int[] num = {1};
Runnable runnable = new Runnable() {
@Override
public void run() {
synchronized (this) {
while (num[0] <= 100) {
notify();
System.out.println(Thread.currentThread().getName() + ": " + num[0]);
num[0]++;
try {
wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.out.println("正常结束");
}
}
};
new Thread(runnable).start();
new Thread(runnable).start();
}
以上代码执行结果如下:
Thread-0: 1
Thread-1: 2
Thread-0: 3
Thread-1: 4
Thread-0: 5
Thread-1: 6
Thread-0: 7
Thread-1: 8
Thread-0: 9
Thread-1: 10
Thread-0: 11
Thread-1: 12
Thread-0: 13
Thread-1: 14
Thread-0: 15
Thread-1: 16
Thread-0: 17
Thread-1: 18
Thread-0: 19
Thread-1: 20
Thread-0: 21
Thread-1: 22
Thread-0: 23
Thread-1: 24
Thread-0: 25
Thread-1: 26
Thread-0: 27
Thread-1: 28
Process finished with exit code 0
每次打印次数有随机性,并不能正常结束,应该是遇到 Lost Wake-Up 问题了,但这个例子是怎么导致的呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
@fefe 说对了,这里main线程结束,程序就结束了,可以用join来保证两个子线程执行完成后才结束程序。查了相关资料,比较多人认为多线程时: