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