superclass=Object
type=class
library=_builtin
extended=
included=

スレッドグループを表すクラスです。グループに属する [[c:Thread]] をまとめて
操作することができます。

[[c:Thread]] は必ずいずれかひとつのスレッドグループに属します。
生成されたばかりの Thread は、生成した Thread のグループを引き継ぎます。
メインスレッドはデフォルトでは [[m:ThreadGroup::Default]] に属します。

: 例:

生成したすべてのThreadが終了するのを待つ

    5.times {
       Thread.new { sleep 1; puts "#{Thread.current} finished" }
    }
    
    (ThreadGroup::Default.list - [Thread.current]).each {|th| th.join}
    
    puts "all threads finished"

対象の Thread が Thread を起こす可能性がある場合
([[m:Thread.exclusive]]参照)

    Thread.exclusive do
      (ThreadGroup::Default.list - [Thread.current]).each {|th| th.join}
    end

=== ThreadGroup#freeze と ThreadGroup#enclose の違い

どちらのメソッドでも [[m:ThreadGroup#add]] によるスレッドの追加ができなくなる点は同じですが、
[[m:Thread.new]] に関して違いがあります。現在のスレッドが属する ThreadGroup が freeze 
されている場合、Thread.new{ ... } はエラーになります。ThreadGroup が enclose されているだけでは、
Thread.new{ ... } はエラーになりません。生成されたスレッドは従来通り 親スレッドの ThreadGroup に属します。
