老师 有没有可能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回答

悟空

2019-12-18

没有可能,因为一旦wait会释放锁,所以不存在

拿到锁但是并没有被唤醒,导致所不能释放,这两个线程都堵死


0
1
JLU_LONG
非常感谢!
2019-12-19
共1条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程