我遇到多线程问题。 当我要使用wait()和notify()或join()时,我收到了InterruptedException。 我在WHILE循环中有2个线程,我想等到它们都完成。 这是我的代码:
while (!GamePanel.turn)
{
if(GamePanel.s.isRunning)
{
synchronized (GamePanel.s.thread)
{
try {
GamePanel.s.thread.join();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
//Player selected random moves
if(GamePanel.selectedMove == 1)
{
//Get computer's Random move.
strategy.getRandomMove();
}
else
{
//Player selected AI moves
if(GamePanel.selectedMove == 2)
{
//Get computer's AI move.
strategy.getMove();
System.out.println(strategy.move);
}
}
//Perform the next move of the computer.
Rules.makeMove(GamePanel.dimples, strategy.move, false);
}
strategy.getMove()和Rules.makeMove()都是线程。 对于每个线程,我创建了自己的start()和stop()方法:
public void start()
//This function starts the thread.
{
if (!isRunning)
{
isRunning = true;
thread = new Thread(this);
thread.setPriority(Thread.NORM_PRIORITY);
thread.start();
}
}
private void stop()
//This function stops the thread.
{
isRunning = false;
if (thread != null)
{
thread.interrupt();
}
thread = null;
}
我也试过做thread.stop()但仍然是同样的问题。 我的问题是如何让WHILE循环等到两个线程都完成?
答案 0 :(得分:4)
您可以考虑将代码切换为使用CountDownLatch
。您将像下面一样创建锁存器,并且所有3个线程都将共享它:
final CountDownLatch latch = new CountDownLatch(2);
然后你的两个线程会在完成后递减计数器:
countDown.countDown();
你的等待线程会做:
countDown.await();
在两个线程完成并且锁存器变为0之后,它将被唤醒。