Runnable
が定義されたFlash
というクラスがあります。同じRunnableから別のスレッドインスタンスを正しく作成するにはどうすればよいですか?
class Flash
{
Runnable slow = new Runnable(){
public void run(){
//Do stuff here
}
}
};
Thread slowThread = null; //Just declared a Thread variable
//more stuff here
}
今、私は実行可能slow
を使用して、新しいスレッドクラスのオブジェクトを作成しますblinkslow()
という名前のメソッドがあります。それは設定し、今、run()
方法は、その最後の文では、その仕事を終えるとき
void blinkSlow()
{
if(!threadRunning) //Boolean to make sure the thread is not running(works fine)
{
slowThread=null;
slowThread = new Thread(slow);
slowThread.start();
threadRunning = true;
}
}
をこのブール値フラグthreadRunning
をfalseに設定して終了します。
次に、メソッドblinkslow()
を呼び出すと、スレッドは実行されません。なぜこうなった? 私が作ったことを確認してください:スレッドはすなわち、再びblinkshow()
メソッドを呼び出す前に、そのrun()
方法を完了停止した
- 。
slowThread = new Thread(slow);
というステートメントは、呼び出されるたびにRunnableでThreadクラスの新しいインスタンスを作成するので、同じスレッドを再起動しようとしていません。
実行可能ファイルの別のインスタンスを最初に実行終了した後で再作成するにはどうすればよいですか?私が上でやったことは、二度目には働いていないし、私は理由もない。
'threadRunning'の宣言がありません。クラスインスタンスですか?私は、この変数が実行後に正しくfalseに設定されていないと思われます。 – Xvolks
'slowThread.start();と' threadRunning = true;をスワップします。 'start()'を呼び出すと、その時点までの変数に対する他のすべての変更に対して「発生前」の関係が作成されます。 'returns – Ferrybig
@Xvolksこのフラグは、このRunnableのすぐ上にある同じ' Flash'クラスで宣言されます。今までの私のコードはかなりシンプルで、起こることはあまりなく、このフラグが設定され、正しく動作することを確認しました。 –