我刚刚写了一个简单的Java示例,以熟悉等待和通知方法的概念。
这个想法是,在调用notify()
时,主线程将打印总和。
MyThread类
public class MyThread extends Thread {
public int times = 0;
@Override
public void run() {
synchronized (this) {
try {
for (int i = 0; i < 10; i++) {
times += 1;
Thread.sleep(500);
if (i == 5) {
this.notify();
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
主类
public class Main {
public static void main(String[] args) {
MyThread t = new MyThread();
synchronized (t) {
t.start();
try {
t.wait();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(t.times);
}
}
}
预期结果
期望结果是5,但实际得到的却是10。
我原本认为当调用notify()
时,主线程会被唤醒并执行System.out.println(t.times)
语句,这应该输出5。然后run()
方法将继续运行直到完成for循环,这将把times的值更新为10。
非常感谢您的帮助。
notify
不会释放锁。 - tkausl