その通りです。 ドキュメントから:
スレッドを複数回開始することは決して合法ではありません。特に、スレッドは実行が完了すると再起動されない場合があります。
繰り返し計算に対して何ができるかという点では、SwingUtilitiesのinvokeLaterメソッドを使用できるように見えます。あなたはすでにrun()
直接呼び出しを実験しています。つまりRunnable
、rawではなくを使用することをすでに考えていますThread
。タスクinvokeLater
だけでメソッドを使用してみて、Runnable
それがあなたのメンタルパターンに少しよく合うかどうかを確認してください。
ドキュメントの例は次のとおりです。
Runnable doHelloWorld = new Runnable() {
public void run() {
// Put your UI update computations in here.
// BTW - remember to restrict Swing calls to the AWT Event thread.
System.out.println("Hello World on " + Thread.currentThread());
}
};
SwingUtilities.invokeLater(doHelloWorld);
System.out.println("This might well be displayed before the other message.");
そのprintln
呼び出しをあなたの計算に置き換えれば、それはまさにあなたが必要とするものであるかもしれません。
編集:コメントをフォローアップしましたが、元の投稿のAndroidタグに気付きませんでした。AndroidでのinvokeLaterに相当するのはHandler.post(Runnable)
です。そのjavadocから:
/**
* Causes the Runnable r to be added to the message queue.
* The runnable will be run on the thread to which this handler is
* attached.
*
* @param r The Runnable that will be executed.
*
* @return Returns true if the Runnable was successfully placed in to the
* message queue. Returns false on failure, usually because the
* looper processing the message queue is exiting.
*/
したがって、Androidの世界では、上記と同じ例を使用して、Swingutilities.invokeLater
をへの適切な投稿に置き換えることができますHandler
。