ThreadGroup

Thread必然归属于某一个线程组. 可以使用ThreadGroup类来统一管理该线程组内的Thread.

默认的ThreadGroupThreadGroup::Default. 新生成的Thread归属于生成它的那个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时(请参考Thread.exclusive)

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

超类:

类方法:

ThreadGroup.new

生成并返回一个新的ThreadGroup.

方法:

add(thread)

thread线程的线程组变为self.

返回self.

enclose ((<ruby 1.8 特性>))
禁止向ThreadGroup中添加/删除Thread(但不会进行冻结).
(若添加/删除的话,则会引发((<ThreadError>))异常)

返回self.

添加的例子:

      thg = ThreadGroup.new.enclose
      thg.add Thread.new {}

      => -:2:in `add': can't move to the enclosed thread group (ThreadError)

删除的例子:

      thg1 = ThreadGroup.new
      thg2 = ThreadGroup.new

      th = Thread.new {sleep 1}

      thg1.add th
      thg1.enclose
      thg2.add th

      => -:8:in `add': can't move from the enclosed thread group (ThreadError)
enclosed? ((<ruby 1.8 特性>))

以布尔值的形式返回enclose的状态.不能向被freeze的ThreadGroup中添加/删除Thread,此时enclosed?会返回false.

thg = ThreadGroup.new
p thg.enclosed?         # => false
thg.enclose
p thg.enclosed?         # => true

thg = ThreadGroup.new
p thg.enclosed?         # => false
thg.freeze
p thg.enclosed?         # => false
list

以数组的形式返回self中的线程列表.

返回结果中不会包括处于终结处理中(aborting)或终止状态(dead)的线程(这与Thread.list是一样的).

常数:

Default

默认的ThreadGroup. 主线程最初就属于该线程组.