J2SE-API > Thread

スレッド

スレッド概要

  • TECHSCOREより
スレッドとは、プログラムを実行している主体(例えて言うなら1人の人間)です。すべてのプログラムはスレッドによって実行されています。
1つのスレッドは、ひとりの人間がプログラムを1行ずつ読んでプログラムの流れを追いかけるように、命令を1つずつ解釈し処理を実行していきます。
  • まあよく聞くけどいまいちイメージわかず。。
  • Javaの道より
インターネットブラウザはマルチスレッドプログラムです。画像をダウンロードしながら、音楽を聞きながら、画面をスクロールしたり、他のページを閲覧したりと言ったことができます。

プログラムの中でスレッドを作成する方法

  • Threadクラスを継承したクラスを利用する
    • 1. Threadクラスを継承するクラスを作成する。
    • 2. そのクラスでrunメソッドを宣言する。
    • 3. そのクラスのインスタンスを作成する。
    • 4. そのインスタンスのstartメソッドを呼び出す。
  • Runnableインタフェースを実装したクラスを利用する
    • 1. Runnableインタフェースを実装したクラスを作成する。
    • 2. そのクラスでrunメソッドを実装する。
    • 3. そのクラスのインスタンスを作成する。
    • 4. そのインスタンスを引数としたコンストラクタでThreadクラスのインスタンスを作成する。
    • 5. そのThreadクラスのインスタンスのstartメソッドを呼び出す。

スレッドの排他制御

  • マルチスレッドで同じオブジェクトが同時に操作されるとプログラムに不具合が発生する。同じオブジェクトが同時に操作されないようするために、スレッドの排他制御が必要となる。

スレッドローカル(ThreadLocal)

  • ThreadLocalは、スレッド毎の値を保持する為のクラス。
  • あるクラス(のインスタンス)がマルチスレッドで呼ばれる際に、スレッド毎に異なる値(インスタンス)を使いたい場合に使用する。
  • 自分でThread(やRunnable)を使ってマルチスレッド化しているなら スレッド毎の値なんて簡単に保持できるので、ThreadLocalには意味が無い。
  • しかしウェブアプリ(サーブレット)は1つのインスタンスがマルチスレッドで呼ばれるので、そのスレッド毎に別のインスタンスを保持したい時にはとても便利
最終更新:2011年09月11日 13:16