我在同一个对象上同步函数时遇到问题。在我的主类中,我有一个按钮,按下时,应该从不同的类顺序触发两个函数。第一个线程运行正常。我想第二个陷入困境,但是如何陷入困境。但是,当我为第二个线程指定超时时,它会触发。有人可以帮我理解通知/等待发生了什么吗?
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();
}
答案 0 :(得分:2)
我在同一个对象上同步函数时遇到问题
问题是您没有在同一个对象/锁上进行同步,因为this
中每个synchronized(this)
都指的是Thread
的不同实例:
t
thr
要避免此类问题,请创建显式的锁定对象,然后将其传递给您的主题。
答案 1 :(得分:1)
竞争条件是t还是thr首先进入同步部分。在等待之前,我们可以通知。