質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

3003閲覧

JavaのThreadを止める手段について

0819Goki

総合スコア24

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/03/16 19:29

前提・実現したいこと

JavaのThreadに関する質問です。

例えば以下のプログラムのように、スレッドを使ってこの処理を並行処理させたいと思うのですが、
Threadのrun()メソッド内のmethod()は時間が掛かる処理で、またmethod()内に手を加えることができません。
このスレッドを一定時間が経過すると停止するように実装したいです。
自分で思いつく方法は、非推奨のstop()で止める方法なのですが、どのような問題がありますか。
また、どうやって止めるのが一般的ですか。

該当のソースコード

class ThreadTest extends Thread{ public void run(){ ClassTest.method(); //かなり時間がかかる処理 } public void cancel(){ //このメソッドでThreadを止めたい } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

(javaの?)スレッドの停止には, スレッドに停止するか否かのフラグを持たせ, 停止させたい時に外部からそのフラグを立て, スレッド自身が随時フラグをチェックして, 立っていたら始末をして終了する, というのが「安全に停止」する手法として使われていると思います.

件の場合は method() 内でフラグチェック等をしなければならないので, 手を加えられないのであれば「安全に停止」しない可能性を受け入れて, (「安全に停止」できないからと)非推奨の停止メソッドを使用するしか無いように思います.

「安全に停止」というのは, 処理を止めた影響が残らないで止まるということです.
例えば, ファイルに書き込んでいるスレッドを強制的に止めたら, 書き込み途中のファイルが残るかもしれません.
例えば, 通信中のスレッドを強制的に止めたら, 相手のプログラムが異常動作するかもしれません. (これはこれで相手のプログラムの不備ですが.)
とにかく, プログラムは様々なリソースを使って動作しますので, それらがスレッドを止めたことにより異常状態とならないように注意する必要があります.

投稿2019/03/17 02:11

jimbe

総合スコア12614

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Javaに限らず、あらゆる言語では外部よりthreadを止め、破棄させる手段は用意されてますが、そのすべてが推奨されないもの、となってます

いわば、Threadで実行中の処理がいきなり消滅する、ってことなんで、このときにどういう事が起きるのかを考えればわかると思いますが、いくらスレッド自体を安全に止めることができたとしても、強制的に止められた処理の安全性はだれも保証することはできません
#まー、ローカル変数のみを使った処理なら、GCもあることだしまあ、大丈夫だろうとは推測できますが

ってことで、そういう手段はあくまで非常時のみ、と思っていたほうがいいかと思います

投稿2019/03/16 22:19

y_waiwai

総合スコア87747

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問