为什么调用 wait 和 notifyAll 必须是同一个对象
public static void main(String[] args) throws InterruptedException {
TestThread t1 = new TestThread();
t1.setName("T1");
t1.start();
TestThread t2 = new TestThread();
t2.setName("T2");
t2.start();
final Object l = App.class;
synchronized (l) {
t1.notifyAll();
t2.notifyAll();
}
}
static class TestThread extends Thread {
final Object l = App.class;
@Override
public void run() {
synchronized (l) {
try {
System.out.println("线程名: " + this.getName() + ", wait");
l.wait();
System.out.println("线程名: " + this.getName() + ", 不打印");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
因为那个锁,包括wait set这些东西都是属于对象的 (
intrinsic lock
)