public class Demo01{ public static void main(String[] args) throws InterruptedException { var q = new TaskQueue(); var ts = new ArrayList(); for (int i=0; i { for (int i=0; i queue = new LinkedList(); public synchronized void addTask(String s) { this.queue.add(s); this.notifyAll(); } public synchronized String getTask() throws InterruptedException { while (queue.isEmpty()) { this.wait(); } return queue.remove(); } } 教程这样说道:“内部调用了this.notifyAll()而不是this.notify(),使用notifyAll()将唤醒所有当前正在this锁等待的线程,而notify()只会唤醒其中一个(具体哪个依赖操作系统,有一定的随机性)。这是因为可能有多个线程正在getTask()方法内部的wait()中等待” 。 我有点疑惑的一句话是 **“可能有多个线程正在getTask()方法内部的wait()中等待”** , 比如A B C 三个线程,A线程进入了 getTask()方法 , 那么 B 和 C 方法就必须在外面等着啊 。