質問: ### 前提・実現したいこと JavaのThreadに関する質問です。 例えば以下のプログラムのように、スレッドを使ってこの処理を並行処理させたいと思うのですが、 Threadのrun()メソッド内のmethod()は時間が掛かる処理で、またmethod()内に手を加えることができません。 このスレッドを一定時間が経過すると停止するように実装したいです。 自分で思いつく方法は、非推奨のstop()で止める方法なのですが、どのような問題がありますか。 また、どうやって止めるのが一般的ですか。 ### 該当のソースコード ``` class ThreadTest extends Thread{ public void run(){ ClassTest.method(); //かなり時間がかかる処理 } public void cancel(){ //このメソッドでThreadを止めたい } } ```
回答: Javaに限らず、あらゆる言語では外部よりthreadを止め、破棄させる手段は用意されてますが、そのすべてが推奨されないもの、となってます いわば、Threadで実行中の処理がいきなり消滅する、ってことなんで、このときにどういう事が起きるのかを考えればわかると思いますが、いくらスレッド自体を安全に止めることができたとしても、強制的に止められた処理の安全性はだれも保証することはできません #まー、ローカル変数のみを使った処理なら、GCもあることだしまあ、大丈夫だろうとは推測できますが ってことで、そういう手段はあくまで非常時のみ、と思っていたほうがいいかと思います