我有这个方法,它将线程作为参数。我希望这个方法能够让一个线程等待,如果没有一个线程等待,然后在另一个线程进入该方法时唤醒,以便它们两个可以交互。我想我已经接近了,但是在第一个线程上调用 wait() 之后,没有其他线程可以访问该方法。这是我的代码的极简版本:
// In the class 'Node'
public synchronized void trade(Thread thread)
{
if (!threadWaiting)
{
threadWaiting = true;
synchronized(thread)
{
try {
thread.wait();
} catch (InterruptedException e) {...}
}
}
}
我为遗漏任何明显的东西而道歉,我一直在寻找答案,但我是线程新手,所以我不知道要寻找什么。
所以我的问题是,当另一个线程试图进入 trade() 他们不能时,调试器就停在那里。
编辑:这是我要问的更多说明。恐怕我在原始帖子中不太清楚。
所以我有一个名为 Node 的类和另一个名为 Bot 的类。Bot 扩展线程以便它可以暂停。在程序开始时,会创建多个 Bot 对象并启动,然后每个 Bot 将调用 Node 的 trade() 方法并将自身传递给该方法。如果 Bot 是方法中的第一个,那么我希望它的线程在节点上等待,直到另一个 Bot 出现(等待的 Bot 将存储在节点中),此时两个 Bot 将交互。下面是我的伪代码方法的更清晰示例:
// Variable to hold the bot that is waiting.
private Bot waitingBot = null;
// Method belonging to Node.
public synchronized void trade(Bot currentBot)
{
if (waitingBot == null)
{
waitingBot = currentBot;
waitingBot.wait();
}
else
{
currentBot.interactWith(waitingBot);
waitingBot.notify();
waitingBot = null;
}
}
对不起,我原来的帖子的措辞。