Java 使用两个线程顺序调用两个不同函数时的Notify/Wait问题
我在同步同一对象上的函数时遇到问题。在我的主类中,我有一个按钮,当按下该按钮时,应该从一个不同的类中按顺序启动两个函数。第一个线程运行良好。我想第二个会陷入僵局,但我知道怎么做。但是,当我为第二个线程指定超时时,它会触发。有人能帮我了解一下通知/等待的情况吗Java 使用两个线程顺序调用两个不同函数时的Notify/Wait问题,java,multithreading,synchronization,Java,Multithreading,Synchronization,我在同步同一对象上的函数时遇到问题。在我的主类中,我有一个按钮,当按下该按钮时,应该从一个不同的类中按顺序启动两个函数。第一个线程运行良好。我想第二个会陷入僵局,但我知道怎么做。但是,当我为第二个线程指定超时时,它会触发。有人能帮我了解一下通知/等待的情况吗 public void actionPerformed(ActionEvent ae) { t = new Thread () { public void run ()
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();
}
t或thr是否首先进入同步段是一个竞赛条件。t可以在thr等待之前通知。t或thr是否首先进入同步部分是一种竞争条件。t可以在thr等待之前通知。t或thr是否首先进入同步部分是一种竞争条件。t可以在thr等待之前通知。t或thr是否首先进入同步部分是一种竞争条件。t无法在thr等待之前通知 我在同步同一对象上的函数时遇到问题 问题是您没有在同一个对象/锁上同步,因为每个
synchronized(this)
中的this
都引用了线程的不同实例:
- 来自
t
- 一个来自
thr
为避免此类问题,请创建显式锁对象,并将其传递给线程
我在同步同一对象上的函数时遇到问题
问题是您没有在同一个对象/锁上同步,因为每个synchronized(this)
中的this
都引用了线程的不同实例:
- 来自
t
- 一个来自
thr
为避免此类问题,请创建显式锁对象,并将其传递给线程
我在同步同一对象上的函数时遇到问题
问题是您没有在同一个对象/锁上同步,因为每个synchronized(this)
中的this
都引用了线程的不同实例:
- 来自
t
- 一个来自
thr
为避免此类问题,请创建显式锁对象,并将其传递给线程
我在同步同一对象上的函数时遇到问题
问题是您没有在同一个对象/锁上同步,因为每个synchronized(this)
中的this
都引用了线程的不同实例:
- 来自
t
- 一个来自
thr
为避免此类问题,请创建显式锁定对象,并将其传递给线程。您的标题过于笼统。请改正它。要获得提示,请访问,还是这样更好@不完全是。尽量简短地描述你的问题,而不是告诉我们你有问题。让你的标题可以为有同样问题的人搜索。现在呢?抱歉搞混了@PshemoNote:这个程序有两个bug。Pshemo的回答谈到了其中一个,JJF的回答解释了另一个。你的标题太笼统了。请改正它。要获得提示,请访问,还是这样更好@不完全是。尽量简短地描述你的问题,而不是告诉我们你有问题。让你的标题可以为有同样问题的人搜索。现在呢?抱歉搞混了@PshemoNote:这个程序有两个bug。Pshemo的回答谈到了其中一个,JJF的回答解释了另一个。你的标题太笼统了。请改正它。要获得提示,请访问,还是这样更好@不完全是。尽量简短地描述你的问题,而不是告诉我们你有问题。让你的标题可以为有同样问题的人搜索。现在呢?抱歉搞混了@PshemoNote:这个程序有两个bug。Pshemo的回答谈到了其中一个,JJF的回答解释了另一个。你的标题太笼统了。请改正它。要获得提示,请访问,还是这样更好@不完全是。尽量简短地描述你的问题,而不是告诉我们你有问题。让你的标题可以为有同样问题的人搜索。现在呢?抱歉搞混了@PshemoNote:这个程序有两个bug。Pshemo的回答谈到了其中一个,JJF的回答解释了另一个。这是有道理的。我想,如果先启动thr,它将在t开始之前等待@JJF这一点的意义在于,o.notify()
不会做任何事情,除非其他线程已经在o.wait()
调用中等待。我理解notify不会做任何事情,除非另一个线程正在等待,但是如果首先启动thr,它不会等待t来进行调用吗@jameslarge@trevalexandro,Re,“…如果先启动thr,它是否会等待…”这是一场比赛。当主线程在调用t.start()
之前调用thr.start()
时,这可能会给thr
线程带来一点优势,但这并不保证thr
线程会赢得比赛。哦,好吧,我现在明白了。我在想,我们应该先等一等。但是,这两个线程将同时运行。如何保证一个线程首先获取监视器?我知道启动时可以让一个线程休眠,但我想明确地处理@jameslargeThat。我想,如果先启动thr,它将在t开始之前等待@JJF这一点的意义在于,o.notify()
不会做任何事情,除非其他线程已经在o.wait()
调用中等待。我理解notify不会做任何事情,除非另一个线程正在等待,但是如果首先启动thr,它不会等待t来进行调用吗@jameslarge@trevalexandro,Re,“…如果先启动thr,它是否会等待…”这是一场比赛。当主线程在调用t.start()
之前调用thr.start()
时,m