0
0

(java gold) 並列処理

Posted at

スレッド

  • スレッドとはプログラムを実行した場合の最小単位
  • プログラムの実行単位を複数のスレッドに分割して実行することをマルチスレッド
  • スレッドの制御には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 つ以上のスレッドなどの処理単位が並列処理を実行中に、ある特定の処理単位がスケジューリングの問題でリソースを獲得できなくなってしまうこと
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0