关于JAVA wait()和notify()的问题

直接调用wait()是调用哪个对象的wait().
JAVA API中 notify()方法的解释是 唤醒在此对象监视器上等待的单个线程。
如果当前没有等待的线程是不是这句代码相当于费的

2个回答

wait()应该是对应线程的,它对释放对像的锁。这样其它线程就可以访问对像。
如果没有等待线程。那么调用notify()肯定什么都不做啊

千言万语顶不住一段代码:

package com.apkkids.thread;

class ThreadA extends Thread {
    boolean flag = true;

    public void threadExit() {
        flag = false;
    }

    @Override
    public void run() {
        for (int i = 0; i < 10; i++) {
            try {
                System.out.println("ThreadA run " + i + " times");
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("ThreadA exit!");
        synchronized (WaitNotifyTest.obj) {
            WaitNotifyTest.obj.notify();
        }
    }
}

/**
 * @author wxb
 * Description:演示Java使用synchronized、wait和notify来实现线程的互相等待与通知
 *
 * 2015-6-27
 * 下午9:07:35
 */
public class WaitNotifyTest {
    public static Object obj = new Object();

    public static void main(String[] args) {
        ThreadA threadA = new ThreadA();
        threadA.start();
        synchronized (WaitNotifyTest.obj) {
            try {
                obj.wait();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        System.out.println("Main Thread exit!");
    }

}


Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问