【发布时间】:2010-06-29 12:04:37
【问题描述】:
public class Main2 {
public static void main(String[] args) {
new Test2().start();
new Test2().start();
}
}
class Test2 extends Thread {
@Override
synchronized public void run() {
try {
System.out.println("begin wait");
wait();
} catch (Exception ex) {
}
}
}
作为运行测试的实际结果: 开始等待, 开始等待, 从两个线程两次。 与预期结果的对比: 开始等待, 仅来自两个线程之一的一次,因为在同步的 run() 方法中调用了 wait()。 为什么调用 Object 的 wait() 会中断线程同步?
比很多!
public class Main3 {
public static void main(String[] args) {
Test3 t = new Test3();
new Thread(t).start();
new Thread(t).start();
}
}
class Test3 implements Runnable {
synchronized public void run() {
try {
System.out.println("begin wait");
wait();
} catch (Exception ex) {
}
}
}
@akf 和@肖恩欧文
感谢您的回复。抱歉我的错误,现在我修改了代码,将同步放在同一个对象的 run() 上,结果仍然是:开始等待,开始等待,两次。
@akf
wait 会释放那个锁 同步已经抓住了,将是 通知线程后重新获取。
你能详细说明一下吗?
【问题讨论】:
标签: java multithreading concurrency