java - 理解 wait()

标签 java multithreading wait scjp

我创建了这个愚蠢的程序来玩 wait()

public class WaitTest {
    public static void main(String [] args) {

      System.out.print("1 ");
      synchronized(args){

        System.out.print("2 ");

        try {
          args.wait();
          args.notifyAll();
        }
        catch(InterruptedException e){ System.out.print("exception caught");}

        System.out.print("3 ");
      }
   }
}

在我的机器上,代码永远不会打印 3,除非我编写 wait(100) 或其他毫秒数。这是为什么?

最佳答案

您在notifyAll()之前执行wait()。 wait() 将被阻塞。当您输入超时值时, wait() 将超时,然后您的程序将继续。如果您希望程序正常工作,请创建一个线程并在那里执行 notificationAll() 。 wait() 和notifyAll 是为线程间同步而设计的。

关于java - 理解 wait(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1897903/

相关文章:

java - 跨 2 个日历年的日历计算存在问题

java - 遇到 'Dead Link' 问题

Java:如何通过线程同步文件修改

java - ConcurrentHashMap 中 entrySet().removeIf 的行为

c - 在线程库中使用 getcontext() 时出现段错误

python - threading.Condition.wait() 未捕获 SIGTERM

java - 使用 Itext 5 定位 JFreeChart 图像

java.lang.ClassCastException : CommonsMultipartFile cannot be cast to oracle. sql.BFILE

java - 等待类名为空 - Selenium Webdriver - Java

mysql - 如何忽略wait_timeout/interactive_timeout?