私は実際に、スレッドがどこで実行されているかに関係なく、スレッドを強制終了するためのより簡単な方法を探しています。しかし、インターネットのほとんどのソリューションでは、ブールフラグを使用してスレッドの実行を制御するように指示されています。スレッドを停止する場合は、ブール変数をfalseに設定します。
しかし、ランナブル内のタスクがLONG線形タスクである場合、つまりタスクが繰り返されていない場合はどうなるでしょうか。その場合、タスクのブロック全体をカバーする「while」ループを作成するのはそれほど簡単ではありません。
Thread.stopを使用するのは本当に魅力的ですが、「非推奨」という警告を使用するのは非常に危険なようです。この記事を読みました 。なぜThread.stop、Thread.suspend、Thread.resume、Runtime.runFinalizersOnExitが非推奨になるのですか?
でも分かりません
これらのモニターによって以前に保護されていたオブジェクトのいずれかが不整合な状態にあった場合、他のスレッドがこれらのオブジェクトを不整合な状態で表示する可能性があります。そのような物体は損傷していると言われています。
「一貫性のない状態」とはどういう意味ですか?誰かがこれについて説明できれば幸いです。
質問をより低いレベルのビューに拡張したいと思います。たとえばi = i + 1;
、JVM(おそらくアセンブリ言語も同様)では、このJavaステートメントはいくつかの小さな命令に分割されます。たとえばmove i ; add i ; get i into memory 0x0101
(これは例です!私はまったくありません)アセンブリ言語を知っている!)
さて、thread.stopを呼び出すと、実際にはどこで停止しますか?スレッドはCOMPLETEDJavaステートメントの後で停止しますか、それとも「アセンブル言語」の途中にある可能性がありますか?答えが2番目の場合、それは私たちが言った理由である可能性があります
そのような物体は損傷していると言われています。
?
わかりました、私の質問はちょっと混乱しています。誰かが理解して説明できることを願っています。前もって感謝します。