Tbpgr Blog

Employee Experience Engineer tbpgr(てぃーびー) のブログ

Ruby | Thread

概要

Thread

詳細

RubyでThreadを扱う方法について。

RubyでThreadを扱う場合はThreadクラスを利用します。
ブロック付きでThreadのインスタンスを生成すると、ブロック内の処理を行う
スレッドが生成されます。

複数のスレッドを生成した場合に、一部のスレッドの例外終了によって他のスレッドも
終了しないようにするためにはThread#joinで待機します。

Mutex#synchronizeはJavaのsynchronizedブロック同様です。

サンプルコード

def inc(total, add)
  total + add
end

mutex=Mutex.new
threads=(1..10).map do |outer_count|
  Thread.new do
    total=0
    1_000.times do
      mutex.synchronize {total=inc(total, outer_count)}
    end
    puts total
  end
end

threads.each(&:join)

出力

1000
2000
3000
4000
5000
6000
7000
8000
9000
10000