我有两个线程,比如T1和T2,它们同时对同一个对象obj:
class T1 extends Thread {
public void run() {
while(true) {
synchronized(obj) {
while(condition) {
...do something...
obj.wait();
}
...do something else...
obj.notify();
}
}
}
}
class T2 extends Thread {
public void run() {
while(true) {
synchronized(obj) {
while(!condition) {
...do something...
obj.wait();
}
...do something else...
obj.notify();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以,说T1首先获得锁定,进入while(condition)循环并暂停自己.另一方面,T2现在可以自由获取锁定:!condition未满足,因此它不会进入内部while循环,它会执行其他操作然后调用obj.notify().
我期待的是:T1唤醒,获取锁定等等,但我看到的大部分时间是T1无法获取锁定因此T2 …