私は、あるスレッドが4つの他のスレッドをフォークし、その完了を待つプロジェクトに取り組んでいます。フォークスレッドは、いつでもフォークされたスレッドを停止する能力を持つ必要があります。 keepRunnigが公開されてスレッドから新しいスレッドを開始する
今class ForkedThread implements Runnable {
public boolean keepRunning = true;
public void run() {
while(keepRunning is true){
//Do the Job
}
}
}
いるので、それが外部からアクセスすることができ、偽行うことができます。 は、私のような何かをした、同じことを達成するために。 私の質問は、keepRunningまたはその罰金の使用を同期する必要がありますか? 第二に、この技術はOKですか?または、ThreadPool
を使用して自分の仕事をしなければなりません。 実際には、ThreadPool
を使用すると、自分のコードの複雑さが増します。助けてください。
これは非常にブーリアンの問題です!さもなければ、JVMは 'keepRunning'を一度自由に読み込み、それが本当であることを確認し、それをローカルキャッシュ(例えばCPU上)に保存し、そこから読み続けることができます。別のスレッドがそれを変更した場合、JVMはキャッシュを更新する義務がありません。永遠に回転することができます。 「揮発性」はそれを防ぎます。これは単なる学問ではない。私は自分のデュアルコアラップトップでそれをかなり簡単に作り出すことができます。 – yshavit
+1 yshavit ...ありがとうございました。 –