0

マルチスレッドに問題があります。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 ループを待機させるにはどうすればよいですか??

4

1 に答える 1