多线程问题不能等待线程完成

时间:2013-04-03 14:27:56

标签: java eclipse multithreading

我遇到多线程问题。 当我要使用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循环等到两个线程都完成?

1 个答案:

答案 0 :(得分:4)

您可以考虑将代码切换为使用CountDownLatch。您将像下面一样创建锁存器,并且所有3个线程都将共享它:

final CountDownLatch latch = new CountDownLatch(2);

然后你的两个线程会在完成后递减计数器:

countDown.countDown();

你的等待线程会做:

countDown.await();

在两个线程完成并且锁存器变为0之后,它将被唤醒。