0

からの引用"Effective Java book"

" ライブラリには Thread.stop メソッドが用意されていますが、このメソッドは本質的に安全ではないため、ずっと前に推奨されていません。使用するとデータが破損する可能性があります。Thread.stop は使用しないでください"

誰でも理由を教えてもらえますか?

4

4 に答える 4

8

停止したスレッドが重大なロックを保持している場合はどうなりますか? スレッドがオブジェクトを一貫性のない状態に置き、それを復元する機会がまだない場合はどうなるでしょうか? スレッドを停止する正しい方法は、スレッドを外部から強制的に停止することではなく、協力して行うことです。

また、それは単に論理的な意味を持ちません。アプリケーション内のすべてのスレッドは、同じ目的を達成するために協力する必要があります。すべきでないことがある場合、どのスレッドもそれを行うべきではありません。スレッドを停止する理由はありません。アプリケーション全体が最初に実行する必要がある場合にのみ、何かを実行するようにコード化する必要があります。スレッドを停止する必要があるのは、それが実行しているコードが壊れているためだけです。つまり、実行すべきでないことを実行しているからです。そのコードを修正するだけです。

于 2013-06-02T11:22:38.503 に答える
5

javadoc から:

Thread.stop が非推奨になったのはなぜですか?

本質的に安全ではないからです。スレッドを停止すると、スレッドがロックしていたすべてのモニターのロックが解除されます。(ThreadDeath 例外がスタックに伝搬されると、モニターのロックが解除されます。) これらのモニターによって以前に保護されたオブジェクトのいずれかが矛盾した状態にあった場合、他のスレッドはこれらのオブジェクトを矛盾した状態で表示する可能性があります。そのようなオブジェクトは破損していると言われています。スレッドが破損したオブジェクトを操作すると、任意の動作が発生する可能性があります。この動作は微妙で検出が困難な場合もあれば、目立つ場合もあります。他の未チェックの例外とは異なり、ThreadDeath はスレッドを黙って強制終了します。したがって、ユーザーは自分のプログラムが破損している可能性があるという警告を受けません。破損は、実際の損傷が発生した後、数時間後または数日後であっても、いつでも明らかになる可能性があります。

詳細については、次をお読みください。

http://docs.oracle.com/javase/1.4.2/docs/guide/misc/threadPrimitiveDeprecation.html

于 2013-06-02T11:22:59.927 に答える
1

簡単に言えば、 stopクリーンアップの機会を与えずにスレッドを強制的に中止します。最も典型的な結果は混乱です。

于 2013-06-02T11:24:11.120 に答える