私は、Thread.stop()と他の関数は非難されていることを知っています。特定の条件が満たされている場合、スレッドの実行を停止したいです。ここで私が今やっているの簡易版は、次のとおりです。run()メソッドの内部でJavaスレッドを安全に停止できますか?
public class SomeThread extends Thread
{
private static boolean running = true;
public static void shutdown()
{
running = false;
}
public void run()
{
while(running)
{
// do something cool
}
return; // <- this is what I'm wondering about
}
}
別のクラスは、()メソッド、whileループが終了した後、run()メソッドが返すSomeThreadのシャットダウンを呼び出すとき。これは安全ですか?
私はwhileループを使用している主な理由は、whileループの前に一度しかやりたくないことがいくつかあるためです。スレッドを並行処理に使用します。私はこれがThreadsのためのものの荒廃であると確信していますが、私は主にreturn文について疑問を抱いています。
私は実際に同期を行っています(上記のコードはそれを反映していませんが)。統計情報を削除し、 "実行中"をvolatileに変更すると、スレッドを安全に保つのに十分でしょうか? (私はこの文脈で静的を使用した理由を覚えていますが、今は指摘しているとは思えません) – WillP
あなたが適切な同期を取る場合は、揮発性。私の意見では、揮発性を正しく使用するのははるかに手間がかかります。 – Mat
マットで同意してください。またはAtomicBooleanを使用すると、さらに簡単にIMOできます。 –