老师,我还是不理解为什么wait,notify,notifyAll定义在Object里面

来源:7-8 wait相关问题

张婧仪

2023-05-17

如果定义在Thread里面,有什么影响吗?
Thread lock = new Thread();
我这样使用
和定义在Object中
Object lock=new Object();
这样有什么区别吗
我的代码如下:

public class Test6 {
    static Thread lock = new Thread();

    static class Thread0 extends Thread {
        @Override
        public void run() {
            System.out.println("开始唤醒");
            synchronized (lock) {
                lock.notify();
            }
            System.out.println("唤醒结束");
        }
    }

    static class Thread1 extends Thread {
        @Override
        public void run() {
            System.out.println("开始wait");
            synchronized (lock) {
                try {
                    lock.wait();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            System.out.println("wait结束");
        }
    }

    public static void main(String[] args) throws InterruptedException {
        Thread0 t0 = new Thread0();
        Thread1 t1 = new Thread1();
        t1.start();
        Thread.sleep(100);
        t0.start();
    }
}

写回答

1回答

悟空

2023-05-17

没区别,Thread是Object的子类
0
2
悟空
回复
张婧仪
因为任何类都可以成为锁,不一定必须是Thread类
2023-05-21
共2条回复

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

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

2512 学习 · 939 问题

查看课程