老师 有没有可能wait唤醒的那个程序拿不到锁,而其他程序拿到锁但是并没有被唤醒,导致所不能释放,这两个线程都堵死
来源:7-5 wait解析

JLU_LONG
2019-12-18
public class NotifyAndBlock implements Runnable{
private static Object object=new Object();
public static void main(String[] args) throws InterruptedException {
Runnable runnable=new NotifyAndBlock();
Thread thread1=new Thread(runnable);
Thread thread2=new Thread(runnable);
Thread thread3=new Thread(new Runnable() {
@Override
public void run() {
synchronized (object) {
System.out.println(Thread.currentThread().getName() + "拿到锁");
object.notify();
}
}
});
thread1.start();
thread2.start();
Thread.sleep(10);
thread3.start();
}
@Override
public void run() {
synchronized (object){
System.out.println(Thread.currentThread().getName()+"获得锁");
try {
object.wait();
System.out.println(Thread.currentThread().getName()+"继续执行");
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName()+"结束");
}
}
}
写回答
1回答
-
没有可能,因为一旦wait会释放锁,所以不存在
拿到锁但是并没有被唤醒,导致所不能释放,这两个线程都堵死
012019-12-19
相似问题