#マルチスレッドプログラムの評価基準
##安全性
安全性とは、オブジェクトを壊さないこと。壊れるとは、多くの場合は、オブジェクトのフィールドが予想外の値を取ることに相当する。例えば、銀行口座の預金残高がマイナスになったとすると、これは銀行口座を表すオブジェクトが壊れたことになる。複数のスレッドが利用しても安全性が保たれるクラスをスレッドセーフなクラスと呼ぶ。
##生存性
生存性とは、必要な処理はひつか必ず行われること。安全性と生存性は相反する要求になる場合ある。その典型がデッドロック。これは複数のスレッドが、相手のロック解放を互いに待ってしまう状況。
##再利用性
再利用性とは、クラスを再利用できること。マルチスレッドプログラミングでは、スレッドの排他制御の仕組みや方針をうまくクラスの中に隠ぺいすれば、再利用性の高いプログラムになる。
##パフォーマンス
パフォーマンスとはあ、処理を高速・大量に行えること。スループットは、単位時間あたりの処理数。応答性は要求を出してから反応が返るまでの時間。応答性が高いことを**待ち時間(latency)**が短いと呼ぶこともある。キャパシティは同時に処理できる数。
##評価基準のまとめ
安全性と生存性を守るのは必須。これを満たした上で、いかにして再利用性とパフォーマンスを上げるかが重要。
#Javaのスレッドの優先度
###Javaの優先度は実行処理系を特定しないと役に立たない
- 全てのJavaの実行処理系に共通して規定されていることはほとんどない。
- そのため実行処理系(JVMの実装、バージョン、OS)を特定しない限り優先度は役に立たない。
- ある実行処理系では、高い優先度を持つスレッドが低い優先度を持つスレッドよりも長いCPU時間を割り当てるかもしれないし、もっと高い優先度を持つスレッドが全てのCPU時間を使うかもしれない。
- スレッドのスケジューリングのアルゴリズムも規定されていない。
###優先度を表すクラスフィールド
- Thread.MIN_PRIORITY
- Thread.NORM_PRIORITY
- Thread.MAX_PRIORITY
###優先度を設定/取得するメソッド
Threadクラスのインスタンスメソッド
setPriorityで優先度を設定
getPriorityで優先度を取得する