タグ

interruptedexceptionに関するyukimori_726のブックマーク (3)

  • THI04-J. ブロックしているスレッドやタスクが確実に終了できるようにする

    ネットワークやファイルなどの入出力操作によって処理がブロックされるスレッドやタスクは、サービス運用妨害の脆弱性を防ぐために、明示的な終了の仕組みを呼出し元に提供する必要がある。 違反コード (ブロッキング I/O、volatile フラグ) 以下の違反コード例は、「THI05-J. スレッドの強制終了にThread.stop()メソッドを使用しない」に示しているように、volatile宣言したdoneフラグを使用してスレッドが終了可能であるかどうかを表している。しかし、readLine()メソッドを呼出すと、ネットワーク入出力処理が完了するまでスレッドは待機状態になり、新たに設定されたフラグの値に反応することができない。したがって、スレッドの終了は遅延させられるかもしれない。 // スレッドセーフなクラス public final class SocketReader implements

    THI04-J. ブロックしているスレッドやタスクが確実に終了できるようにする
  • 日記(仮) >> Javaプログラム終了時に確実に終了処理をする

    Ctrl+Cで落とした時に「後始末」な処理(ファイルを閉じるとか,DBにロールバックをかけるとか)をしてから終了させたいとか思ったときの話. 方法は2通りで,ひとつはVMのシャットダウンにフックをかける方法,もうひとつはSIGINTを捕まえるという方法. ちなみに推奨されるのは前者(というか後者が推奨されない.理由は後述). まずは一つ目から.以下の様にして,シャットダウン時に走るスレッドを用意してRuntimeに渡す. public class ShutdownHookTest { public static void main(String[] args) { ShutdownHookTest main = new ShutdownHookTest(); main.exec(); } void exec() { Runtime.getRuntime().addShutdownHook(

  • Thread.sleepのチェック例外InterruptedExceptionの扱い - torutkのブログ

    Java読書会の前回の課題図書「Java並列処理プログラミング」において、ブロッキング・メソッド(Threadクラスのsleepも含む)を呼び出すときに要求されるチェック例外InterruptedExceptionの取り扱いについて述べられていた。 同書籍の著者によるIBM developerWorksの記事Javaの理論と実践: 割り込み例外の処理の方が少し詳しく書かれている。 対処方法 簡単に箇条書きにまとめると、 メソッドのthrows節にInterruptedExceptionを記述し上位へ伝播させる 1.が難しいとき(例:Runnableを実装したクラスのrunメソッドの中)、InterrptedExceptionをキャッチしてインタラプテッド・ステータスを復元する Threadを継承しているrunメソッドの中などスレッドの最上位をコントロールしている場合で、Interrupte

    Thread.sleepのチェック例外InterruptedExceptionの扱い - torutkのブログ
  • 1