java - 为什么线程不等待 notify()?

标签 java concurrency wait notify

为什么线程不等待 notify()?线程启动然后进入等待池,但在那一刻之后它继续执行。

public class JavaApplication2 {
    public static void main(String [] args) {
       ThreadB b = new ThreadB();
       synchronized(b) {
           b.start();
           try {
              System.out.println("1");
              b.wait();
         } catch (InterruptedException e) {}
          System.out.println("Total is: " + b.total);
       }
     }
 }
  class ThreadB extends Thread {   
    int total;
      @Override
    public void run() {
        synchronized(this) {
            total += 1;
            //notify();
       }
    }
 }

最佳答案

您正在同步线程对象本身,这是错误的用法。发生的事情是,垂死的执行线程总是在其 Thread 对象上调用 notify:Thread.join relies on this .因此,很明显为什么在有和没有你自己的 notify 的情况下你会得到相同的行为。

解决方案:使用单独的对象进行线程协调;这是标准做法。

关于java - 为什么线程不等待 notify()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14186828/

相关文章:

java - 非顶级窗口中的非不透明 JButton 背景变得不透明?

multithreading - 几个生产者,一个消费者: Avoid starvation

java - 线程中断 : will it cancel oncoming wait() call?

java - FluentWait selenium 使用 ThreadLocal<RemoteWebDriver>

r - 等待用户输入 5 秒,否则使用默认值

java - java中的参数多态性与简单示例

java - 如何从输入的一组数字中获取最大值和最小值?

Java线程设计

C - 读取器/写入器(并发): Forking & Semaphores Output

java - 从自定义 Web 服务器迁移到 apache Web 服务器