スレッドの制御 |
スレッドの同期
しばしば、スレッドはデータを共有する必要がある。 例えば、ファイルにデータを書き込むスレッドがあり、同時に、別のスレッドがその同じファイルからデータを読み込んでいると仮定する。 スレッドが情報を共有する必要がある時は、希望した結果を得るためにスレッドの同期をとる必要がある。公平性、欠乏状態、デッドロック
いくつかの並行するスレッドが資源のために競争しているプログラムを書く場合、公平性が保たれるように注意しなければならない。 各スレッドが限定された資源に十分アクセスでき、正当に進行できる時は、システムは公平である。 公平なシステムは欠乏状態またはデッドロックを考慮しない。 プログラム内の1つ以上のスレッドが、資源へのアクセスをブロックされて続行できない場合、欠乏状態が発生する。 デッドロックは欠乏状態の究極の形であり、 2 つ以上のスレッドが満足できない状態で待ち続けている時に発生する。次のページの デッドロックと哲学者の晩餐では、デッドロックの例を示すために哲学者の晩餐の問題を使用して、それを防止する方法を説明する。
Volatile
プログラムは、同期メソッドあるいは同期ブロックの保護外でメンバ変数を変更することができ、メンバ変数を volatile と宣言することができる。メンバ変数を volatile と宣言した場合、 Java 実行時システムはこの情報を使用して、確実に変数を使用前にメモリからロードし、使用後にメモリに格納することができる。 これにより、変数の値がプログラムを通じて一貫し筋が通っていることが保証される。
この時点では、Java 実行時システムは
volatile
マーカを無視する。
スレッドの制御 |