我遇到了多線程問題。 當我使用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循環等待兩個線程完成?
你的stop方法不會停止它中斷線程的線程。或者至少看起來是這樣的。你可以在線程運行方法中顯示你的代碼嗎? – linski
public void run() { \t //某些代碼 \t thread.sleep(delayAfterMove); \t //某些代碼 \t stop(); } – Ron537