スレッド
-
スレッド
とはプログラムを実行した場合の最小単位 - プログラムの実行単位を複数のスレッドに分割して実行することを
マルチスレッド
- スレッドの制御には
java.lang.Threadクラス
とjava.lang.Runnableインターフェース
を使用
スレッドの実行
- Runnable.run()メソッド
- Thread.start()メソッド
- start()メソッドの中ではオーバーライドしたrun()メソッドの呼び出しを行っている
スレッド処理の開始はstart() メソッドだが
(run()メソッドを直接呼び出してもスレッドは開始されない)
スレッドの優先度
- 優先度を取得・設定するメソッド
メソッド名 | 概要 |
---|---|
static Thread currentThread | 現在実行中のスレッドオブジェクトを取得する |
final String getName() | スレッドの名前を返す |
final int getPriority | スレッドの優先度を返す |
final void setPriority(int newPriority) | スレッドの優先度を設定する。1~10まで設定できる |
優先度を表す定数
定数名 | 概要 |
---|---|
MAX_PRIORITY | 最大値で10を表す |
NORMPRIORITY | デフォルト値で5を表す |
MIN_PRIORITY | 最小値で1を表す |
スレッドの制御
Threadクラスのメソッド
メソッド名 | 概要 |
---|---|
Sleep(long n) | nミリ秒呼び出したスレッドが休止する |
join() | 実行中のスレッドが終了するまで待機 |
yield() | 呼び出したスレッドを休止し、ほかのスレッドを実行する |
interrupt() | 休止中のスレッドに割り込みを入れる |
排他制御と同期制御
- 複数のスレッドを運用する際、同じオブジェクトを操作することがあり、その際の値の取り扱いを制御する
排他制御
- メソッド内の処理が行われている間は、ほかスレッドの参照を禁止する
- syncronaizedキーワードを使用
同期制御
- Objectクラスの制御用メソッド
メソッド名 | 概要 |
---|---|
wait() | 現在のスレッドを待機 |
notify() | 待機中のスレッドを1つ再開させる |
notifyAll() | 待機中のスレッドをすべて再開させる |
デッドロック
- 2 つ以上のスレッドなどの処理単位が互いの処理終了を待っているためどの処理も先に進めなくなってしまうこと
ライブロック
- 2 つ以上のスレッドなどの処理単位が互いにロックしているリソースの解放をビジー状態で待っているため処理が進行しているにも拘らずどのスレッドもリソースが獲得できなくなってしまうこと
スタベーション
- 2 つ以上のスレッドなどの処理単位が並列処理を実行中に、ある特定の処理単位がスケジューリングの問題でリソースを獲得できなくなってしまうこと