我有两个线程,比如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();
}
}
}
}
所以,假设T1首先获得锁定,进入while(条件)循环并暂停自己.另一方面,T2现在可以自由获取lock:!条件不满足因此它不会进入内部while循环,它会执行其他操作然后调用obj.notify().
我期待的是:T1唤醒,获取锁定等等,但我看到的大部分时间是T1无法获取锁定因此T2再次执行.
我问你这个行为是由while(true)循环引起的,还是其他什么.