ThreadGroup

ThreadGroup (스레드 그룹)

ThreadGroup여러 스레드를 하나의 그룹으로 묶어 추적하는 방법을 제공해요. 어떤 Thread 객체는 한 번에 하나의 ThreadGroup에만 속할 수 있어요. 스레드를 새 그룹에 추가하면 기존 그룹에서는 자동으로 빠져요.

새로 만들어진 스레드는 그것을 만든 스레드와 같은 그룹에 속해요.

출처: Ruby 4.0 API

본문

상수 (Constants)

  • Default - Ruby가 시작될 때 만들어지는 기본 ThreadGroup이에요. 모든 스레드는 기본적으로 여기에 속해요.

인스턴스 메서드 (Public Instance Methods)

add(thread) → thgrp

주어진 thread를 이 그룹에 추가해요. 이전에 속해 있던 다른 그룹에서는 제거돼요.

puts "Initial group is #{ThreadGroup::Default.list}"
tg = ThreadGroup.new
t1 = Thread.new { sleep }
t2 = Thread.new { sleep }
puts "t1 is #{t1}"
puts "t2 is #{t2}"
tg.add(t1)
puts "Initial group now #{ThreadGroup::Default.list}"
puts "tg group now #{tg.list}"

이 코드는 이런 출력을 만들어요.

Initial group is #<Thread:0x401bdf4c>
t1 is #<Thread:0x401b3c90>
t2 is #<Thread:0x401b3c18>
Initial group now #<Thread:0x401b3c18>#<Thread:0x401bdf4c>
tg group now #<Thread:0x401b3c90>

enclose → thgrp

수신하는 ThreadGroup스레드를 추가하거나 제거하지 못하게 막아요. 다만 enclose된 ThreadGroup 안에서 새 스레드를 시작하는 것은 여전히 가능해요.

ThreadGroup::Default.enclose        #=> #<ThreadGroup:0x4029d914>
thr = Thread.new { Thread.stop }    #=> #<Thread:0x402a7210 sleep>
tg = ThreadGroup.new                #=> #<ThreadGroup:0x402752d4>
tg.add thr
#=> ThreadError: can't move from the enclosed thread group

enclosed? → true or false

thgrp가 enclose 상태면 true를 돌려줘요. ThreadGroup#enclose도 참고하세요.

list → array

이 그룹에 속한 모든 Thread 객체의 배열을 돌려줘요.

ThreadGroup::Default.list   #=> [#<Thread:0x401bdf4c run>]