• ベストアンサー

Thread.stop()について

使用が推奨されていないThread.stop()を使わなくては ならない状況にいるため,その危険性を知っておこうと思ったのですが, http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/misc/threadPrimitiveDeprecation.html の冒頭の「推奨されない理由はなぜですか」を読んでも理解できませんでした. さらに,他のページを探してみて, http://www.nextindex.net/java/thread/lock.html も読んでみましたが,イメージすら浮かびません. 基本的なことが理解できていないのが原因なのは承知していますが, 厳密ではなくてもいいので, ぼんやりとしたイメージだけでも把握できるような 説明ができる方いらっしゃいませんでしょうか.

質問者が選んだベストアンサー

  • ベストアンサー
  • kacchann
  • ベストアンサー率58% (347/594)
回答No.3

スレッドプログラミングはほとんどやったことはなく、 自信ないですが・・・ --- ここ http://sdc.sun.co.jp/java/docs/j2se/1.4/ja/docs/ja/guide/misc/threadPrimitiveDeprecation.html の「Thread.stop が推奨されないのはなぜですか」で言っているのは、 要するに 「共用データの(値の)信頼性」 のことだと思います。 「Thread#stop()を呼んだ時点からそれ以後、 Javaの『スレッド協調機構(モニタ)』で守られていた、 (複数スレッド間で共用されてる)データは信用できなくなる」 ということだと思います。 ---- そもそも、 複数スレッド間で1つのデータ(※インスタンスや変数など)に「協調的に」アクセスしようと思った時は 「同期を取る」などの、そういう、Javaの教本に載っているような、Javaが提供する、 何らかの「協調のしくみ」を利用し、 そのデータを「安全に(※thread-safeに)」利用しますよね? で、その「安全なしくみ」を利用している最中に、 強引にstop()を使って「安全な仕組み」をぶち破ってしまうと、 それ以後、この「安全な仕組み」がもはや消失し、安全でなくなり、 データの値は「信用できないものになる」、 ということだと思います。 --- なんにせよ、ようするに 「stop()を呼んだ以降、共用データは使うな」 ということだと思います。

higedansya
質問者

お礼

ありがとうございました. 共用データは全くないので,私の場合は使ってもよさそうですねぇ.

その他の回答 (2)

  • kozikoji
  • ベストアンサー率29% (5/17)
回答No.2

強制終了のため、メモリが不安定になることも予測されます。 (大規模なシステムの場合) 断言できませんが、ガベージコレクションに処理されない可能性もあります。

higedansya
質問者

お礼

ありがとうございました.(他の質問でもお世話になりました.) stopされるThreadはダイアログが出ているだけなので全く小規模です. 影響があるのが,stop()されるThreadだけなら, stop()を使ってもいいかなぁと思い始めてきました.

回答No.1

実行結果が意図しない結果となるかもしれない、実行されている処理が異常な状態なまま実行されているかもしれない、さらにその異常を即時に検知もできない。 といった具合でしょうか。 個人使用で不具合出ても問題ないアプリなら自己責任ですむと思いますが、たとえば医療現場などで使用するアプリなどで上記のような問題が発生し、(たとえば投薬する薬が誤って表示されるとか)その結果患者が死亡したりした場合とかどうしますか?(開発側が必ずしも罪に問われることはないと思いますが、そういう事件を起こした開発者はその後どうなるでしょうか・・・)

higedansya
質問者

お礼

ありがとうございました. 要は何が起こるかわからないということですね. 個人使用ですが,できればstop()使いたくないですね.

関連するQ&A