java - 使用两个线程顺序调用两个不同函数时的通知/等待问题

标签 java multithreading synchronization

我在同步同一对象上的函数时遇到问题。在我的主类中,我有一个按钮,按下该按钮时,应该从不同的类中顺序触发两个函数。第一个线程运行良好。我认为第二个陷入了僵局,但不知道是怎么回事。但是,当我为第二个线程指定超时时,它会触发。有人可以帮助我了解通知/等待发生了什么吗?

public void actionPerformed(ActionEvent ae)
    {
        t = new Thread () 
        {
            public void run ()
            {
                synchronized(this)
                {
                    one();
                    notify();
                }
            }
        };
        thr = new Thread () 
        {
             public void run ()
             {
                 synchronized (this)
                 {
                    try
                    {
                        wait();
                        two();
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                 }
             }
         };
        thr.start();
        t.start();
    }

最佳答案

I'm having an issue synchronizing functions on the same object

问题是您没有在同一对象/锁上同步,因为 this在每个 synchronized(this)指的是 Thread 的不同实例:

  • 来自 t 的一个
  • 来自 thr 的一个

为了避免此类问题,请创建显式锁定对象,并将其传递给线程。

关于java - 使用两个线程顺序调用两个不同函数时的通知/等待问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33220505/

相关文章:

android - 错误 : Failed to find target with hash string 'android-28'

multithreading - 互斥算法是否需要原子加载和存储?

java - 为什么ArrayList、HashMap等类没有同步?

java - Log4j 2 根记录器覆盖一切?

java - Hibernate不会保存到数据库

multithreading - 在C++ 11中从外部终止线程

java - 工厂、单例、最佳实践

java 8 动态链接时可以使用累加器吗

java - 将值保存在内存中并获取它

c# - 线程化依赖于 C# 中另一个类的函数 (Unity)