種類
- インスタンスメソッド (38)
- 特異メソッド (20)
キーワード
- DEBUG (1)
- DEBUG= (1)
- [] (1)
- []= (1)
-
abort
_ on _ exception (2) -
abort
_ on _ exception= (2) -
add
_ trace _ func (1) - alive? (1)
- backtrace (1)
-
backtrace
_ locations (2) - current (1)
- exit (2)
- fetch (1)
- fork (1)
- group (1)
-
handle
_ interrupt (1) -
ignore
_ deadlock (1) -
ignore
_ deadlock= (1) - inspect (1)
- join (2)
- key? (1)
- keys (1)
- kill (2)
- list (1)
- main (1)
- name (1)
- name= (1)
- new (1)
- pass (1)
-
pending
_ interrupt? (2) - priority (1)
- priority= (1)
- raise (1)
-
report
_ on _ exception (2) -
report
_ on _ exception= (2) - run (1)
-
set
_ trace _ func (1) - start (1)
- status (1)
- stop (1)
- stop? (1)
- terminate (1)
-
thread
_ variable? (1) -
thread
_ variable _ get (1) -
thread
_ variable _ set (1) -
thread
_ variables (1) -
to
_ s (1) - value (1)
- wakeup (1)
検索結果
先頭5件
-
Thread
# [](name) -> object | nil (10.0) -
name に対応したスレッドに固有のデータを取り出します。 name に対応するスレッド固有データがなければ nil を返します。
...``ruby title="例"
[
Thread.new { Thread.current["name"] = "A" },
Thread.new { Thread.current[:name] = "B" },
Thread.new { Thread.current["name"] = "C" }
].each do |th|
th.join
puts "#{th.inspect}: #{th[:name]}"
end
# => #<Thread:0x00000002a54220 dead>: A
# => #<Thread:0x00000002a541a8 d......0002a54130 dead>: C
```
[m:Thread#\[\]] と [m:Thread#\[\]=] を用いたスレッド固有の変数は
Fiber を切り替えると異なる変数を返す事に注意してください。
```ruby
def meth(newvalue)
begin
oldvalue = Thread.current[:name]
Thread.current[:name] = newvalue......h(2) {
f.resume
}
f.resume
p Thread.current[:name]
# => nil if fiber-local
# => 2 if thread-local (The value 2 is leaked to outside of meth method.)
```
Fiber を切り替えても同じ変数を返したい場合は
[m:Thread#thread_variable_get] と [m:Thread#thread_variable_set]
を使用し... -
Thread
# []=(name , val) (10.0) -
val を name に対応するスレッド固有のデータとして格納します。
...] で指定します。文字列を指定した場合は [m:String#to_sym] によりシンボルに変換されます。
- **param** `val` -- スレッド固有データを指定します。nil を指定するとそのスレッド固有データは削除されます。
- **SEE** [m:Thread#\[\]]... -
Thread
# abort _ on _ exception -> bool (10.0) -
真の場合、そのスレッドが例外によって終了した時に、その例外をメインスレッドで再度発生させます。メインスレッドがその例外を捕捉しない限り、結果としてインタプリタ全体が終了します。false の場合、あるスレッドで起こった例外は、 [m:Thread#join] などで検出されない限りそのスレッドだけをなにも警告を出さずに終了させます。
...alse の場合、あるスレッドで起こった例外は、
[m:Thread#join] などで検出されない限りそのスレッドだけをなにも警告を出さずに終了させます。
デフォルトは偽です。[ref:c:Thread#exception]を参照してください。
- **param** `newstate`......生した場合、その例外をメインスレッドで再度発生させるかどうかを true か false で指定します。
```ruby title="例"
thread = Thread.new { sleep 1 }
p thread.abort_on_exception # => false
thread.abort_on_exception = true
p thread.abort_on_exception # => true
```... -
Thread
# abort _ on _ exception=(newstate) (10.0) -
真の場合、そのスレッドが例外によって終了した時に、その例外をメインスレッドで再度発生させます。メインスレッドがその例外を捕捉しない限り、結果としてインタプリタ全体が終了します。false の場合、あるスレッドで起こった例外は、 [m:Thread#join] などで検出されない限りそのスレッドだけをなにも警告を出さずに終了させます。
...alse の場合、あるスレッドで起こった例外は、
[m:Thread#join] などで検出されない限りそのスレッドだけをなにも警告を出さずに終了させます。
デフォルトは偽です。[ref:c:Thread#exception]を参照してください。
- **param** `newstate`......生した場合、その例外をメインスレッドで再度発生させるかどうかを true か false で指定します。
```ruby title="例"
thread = Thread.new { sleep 1 }
p thread.abort_on_exception # => false
thread.abort_on_exception = true
p thread.abort_on_exception # => true
```... -
Thread
# add _ trace _ func(pr) -> Proc (10.0) -
スレッドにトレース用ハンドラを追加します。
...追加したハンドラを返します。
- **param** `pr` -- トレースハンドラ([c:Proc] オブジェクト)
```ruby title="例"
th = Thread.new do
class Trace
end
43.to_s
end
th.add_trace_func lambda {|*arg| p arg }
th.join
# => ["line", "example.rb", 4, nil, #<Binding:0x00007f98......> ["line", "example.rb", 6, nil, #<Binding:0x00007f98e108d4b0>, nil]
# => ["c-call", "example.rb", 6, :to_s, #<Binding:0x00007f98e1097aa0>, Integer]
# => ["c-return", "example.rb", 6, :to_s, #<Binding:0x00007f98e1095cc8>, Integer]
```
- **SEE** [m:Thread#set_trace_func] [m:Kernel?.set_trace_func]... -
Thread
# alive? -> bool (10.0) -
スレッドが「生きている」時、true を返します。
...。
```ruby title="例"
thr = Thread.new { }
p thr.join # => #<Thread:0x401b3fb0 dead>
p Thread.current.alive? # => true
p thr.alive? # => false
```
[m:Thread#status] が真を返すなら、このメソッドも真です。
- **SEE** [m:Thread#status], [m:Thread#stop?]... -
Thread
# backtrace -> [String] | nil (10.0) -
スレッドの現在のバックトレースを返します。
...している場合は nil を返します。
```ruby title="例"
class C1
def m1
sleep 5
end
def m2
m1
end
end
th = Thread.new {C1.new.m2; Thread.stop}
p th.backtrace
# => [
# [0] "(irb):3:in `sleep'",
# [1] "(irb):3:in `m1'",
# [2] "(irb):6:in `m2'",
# [3] "(ir... -
Thread
# backtrace _ locations(range) -> [Thread :: Backtrace :: Location] | nil (10.0) -
スレッドの現在のバックトレースを [c:Thread::Backtrace::Location] の配列で返します。
...スレッドの現在のバックトレースを [c:Thread::Backtrace::Location] の配列で返します。
引数で指定した値が範囲外の場合、スレッドがすでに終了している場合は nil
を返します。
- **param** `start` -- 開始フレームの位置を数値で指......ますが、本メソッドは self に限定した情報を返します。
```ruby title="例"
thread = Thread.new { sleep 1 }
thread.run
p thread.backtrace_locations # => ["/path/to/test.rb:1:in `sleep'", "/path/to/test.rb:1:in `block in <main>'"]
```
- **SEE** [c:Thread::Backtrace::Location]... -
Thread
# backtrace _ locations(start = 0 , length = nil) -> [Thread :: Backtrace :: Location] | nil (10.0) -
スレッドの現在のバックトレースを [c:Thread::Backtrace::Location] の配列で返します。
...スレッドの現在のバックトレースを [c:Thread::Backtrace::Location] の配列で返します。
引数で指定した値が範囲外の場合、スレッドがすでに終了している場合は nil
を返します。
- **param** `start` -- 開始フレームの位置を数値で指......ますが、本メソッドは self に限定した情報を返します。
```ruby title="例"
thread = Thread.new { sleep 1 }
thread.run
p thread.backtrace_locations # => ["/path/to/test.rb:1:in `sleep'", "/path/to/test.rb:1:in `block in <main>'"]
```
- **SEE** [c:Thread::Backtrace::Location]... -
Thread
# exit -> self (10.0) -
スレッドの実行を終了させます。終了時に ensure 節が実行されます。
...m:Thread#value] の返り値は不定です。
自身がメインスレッドであるか最後のスレッドである場合は、プロセスを [`exit(0)`](m:Kernel?.exit)
により終了します。
[m:Kernel?.exit] と違い例外 [c:SystemExit] を発生しません。
```ruby
th1 = Thread.... -
Thread
# fetch(name , default = nil) {|name| . . . } -> object (10.0) -
name に関連づけられたスレッドに固有のデータを返します。 name に対応するスレッド固有データがない時には、引数 default が与えられていればその値を、ブロックが与えられていればそのブロックを評価した値を返します。
...ます。
```ruby title="例"
th = Thread.new { Thread.current[:name] = 'A' }
th.join
p th.fetch(:name) # => "A"
p th.fetch(:fetch, 'B') # => "B"
p th.fetch('name') {|name| "Thread" + name} # => "A"
p th.fetch('fetch') {|name| "Thread" + name} # => "Threadfetch"
```
- **SEE** [m:Thread#\[\]]... -
Thread
# group -> ThreadGroup (10.0) -
スレッドが属している [c:ThreadGroup] オブジェクトを返します。
...スレッドが属している [c:ThreadGroup] オブジェクトを返します。
```ruby
p Thread.current.group == ThreadGroup::Default
# => true
```... -
Thread
# inspect -> String (10.0) -
{: since=""}
...{: since=""}
自身を人間が読める形式に変換した文字列を返します。
```ruby title="例"
a = Thread.current
p a.inspect # => "#<Thread:0x00007fdbaf07ddb0 run>"
b = Thread.new{}
p b.inspect # => "#<Thread:0x00007fdbaf8f7d10 (irb):3 dead>"
```... -
Thread
# join -> self (10.0) -
スレッド self の実行が終了するまで、カレントスレッドを停止します。self が例外により終了していれば、その例外がカレントスレッドに対して発生します。
...* `ThreadError` -- join を実行することによってデッドロックが起きる場合に発生します。またカレントスレッドを join したときにも発生します。
以下は、生成したすべてのスレッドの終了を待つ例です。
```ruby
threads = []
threads.......push(Thread.new { n = rand(5); sleep n; n })
threads.push(Thread.new { n = rand(5); sleep n; n })
threads.push(Thread.new { n = rand(5); sleep n; n })
threads.each {|t| t.join}
```... -
Thread
# join(limit) -> self | nil (10.0) -
スレッド self の実行が終了するまで、カレントスレッドを停止します。self が例外により終了していれば、その例外がカレントスレッドに対して発生します。
...* `ThreadError` -- join を実行することによってデッドロックが起きる場合に発生します。またカレントスレッドを join したときにも発生します。
以下は、生成したすべてのスレッドの終了を待つ例です。
```ruby
threads = []
threads.......push(Thread.new { n = rand(5); sleep n; n })
threads.push(Thread.new { n = rand(5); sleep n; n })
threads.push(Thread.new { n = rand(5); sleep n; n })
threads.each {|t| t.join}
```... -
Thread
# key?(name) -> bool (10.0) -
name に対応したスレッドに固有のデータが定義されていれば true を返します。
...name に対応したスレッドに固有のデータが定義されていれば
true を返します。
- **param** `name` -- 文字列か [c:Symbol] で指定します。
```ruby title="例"
me = Thread.current
me[:oliver] = "a"
p me.key?(:oliver) # => true
p me.key?(:stanley) # => false
```... -
Thread
# keys -> [Symbol] (10.0) -
スレッド固有データに関連づけられたキーの配列を返します。キーは [c:Symbol] で返されます。
...スレッド固有データに関連づけられたキーの配列を返します。キーは
[c:Symbol] で返されます。
```ruby
th = Thread.current
th[:foo] = 'FOO'
th['bar'] = 'BAR'
p th.keys
# => [:bar, :foo]
```... -
Thread
# kill -> self (10.0) -
スレッドの実行を終了させます。終了時に ensure 節が実行されます。
...m:Thread#value] の返り値は不定です。
自身がメインスレッドであるか最後のスレッドである場合は、プロセスを [`exit(0)`](m:Kernel?.exit)
により終了します。
[m:Kernel?.exit] と違い例外 [c:SystemExit] を発生しません。
```ruby
th1 = Thread.... -
Thread
# name -> String (10.0) -
self の名前を返します。
...self の名前を返します。
- **SEE** [m:Thread#name=]... -
Thread
# name=(name) (10.0) -
self の名前を name に設定します。
...フォームによっては pthread やカーネルにも設定を行う場合があります。
- **raise** `ArgumentError` -- 引数に ASCII 互換ではないエンコーディングのものを指定した場合に発生します。
```ruby title="例"
a = Thread.new{}
a.name = 'named'
p a.na......me # => "named"
p a.inspect # => "#<Thread:0x00007f85ac8721f0@named (irb):1 dead>"
```
- **SEE** [m:Thread#name]... -
Thread
# pending _ interrupt?(error = nil) -> bool (10.0) -
self の非同期例外のキューが空かどうかを返します。
...self の非同期例外のキューが空かどうかを返します。
- **param** `error` -- 対象の例外クラスを指定します。
- **SEE** [m:Thread.pending_interrupt?]... -
Thread
# priority -> Integer (10.0) -
スレッドの優先度を返します。この値が大きいほど優先度が高くなります。 メインスレッドのデフォルト値は 0 です。新しく生成されたスレッドは親スレッドの priority を引き継ぎます。
...定します。プラットフォームに依存します。
```ruby title="例"
p Thread.current.priority # => 0
count1 = count2 = 0
a = Thread.new do
loop { count1 += 1 }
end
a.priority = -1
b = Thread.new do
loop { count2 += 1 }
end
b.priority = -2
count1 = count2 = 0 # res... -
Thread
# priority=(val) (10.0) -
スレッドの優先度を返します。この値が大きいほど優先度が高くなります。 メインスレッドのデフォルト値は 0 です。新しく生成されたスレッドは親スレッドの priority を引き継ぎます。
...定します。プラットフォームに依存します。
```ruby title="例"
p Thread.current.priority # => 0
count1 = count2 = 0
a = Thread.new do
loop { count1 += 1 }
end
a.priority = -1
b = Thread.new do
loop { count2 += 1 }
end
b.priority = -2
count1 = count2 = 0 # res... -
Thread
# raise(error _ type , message , traceback) -> () (10.0) -
自身が表すスレッドで強制的に例外を発生させます。
...。
- **param** `message` -- [m:Kernel?.raise] を参照してください。
- **param** `traceback` -- [m:Kernel?.raise] を参照してください。
```text
Thread.new {
sleep 1
Thread.main.raise "foobar"
}
begin
sleep
rescue
p $!, $@
end
=> #<RuntimeError: foobar>
["-:3"]
```... -
Thread
# report _ on _ exception -> bool (10.0) -
真の場合、そのスレッドが例外によって終了した時に、その内容を $stderr に報告します。
...はスレッド作成時の [m:Thread.report_on_exception] です。
- **param** `newstate` -- スレッド実行中に例外発生した場合、その内容を報告するかどうかを true か false で指定します。
```ruby title="例"
a = Thread.new{ Thread.stop; raise }
a.report_on_exc......true
a.run
# => #<Thread:0x00007fc3f48c7908 (irb):1 run> terminated with exception (report_on_exception is true):
# Traceback (most recent call last):
# (irb):1:in `block in irb_binding': unhandled exception
# #<Thread:0x00007fc3f48c7908 (irb):1 dead>
b = Thread.new{ Thread.stop; raise }
b.......report_on_exception = false
p b.run # => #<Thread:0x00007fc3f48aefc0 (irb):4 dead>
```
- **SEE** [m:Thread.report_on_exception]... -
Thread
# report _ on _ exception=(newstate) (10.0) -
真の場合、そのスレッドが例外によって終了した時に、その内容を $stderr に報告します。
...はスレッド作成時の [m:Thread.report_on_exception] です。
- **param** `newstate` -- スレッド実行中に例外発生した場合、その内容を報告するかどうかを true か false で指定します。
```ruby title="例"
a = Thread.new{ Thread.stop; raise }
a.report_on_exc......true
a.run
# => #<Thread:0x00007fc3f48c7908 (irb):1 run> terminated with exception (report_on_exception is true):
# Traceback (most recent call last):
# (irb):1:in `block in irb_binding': unhandled exception
# #<Thread:0x00007fc3f48c7908 (irb):1 dead>
b = Thread.new{ Thread.stop; raise }
b.......report_on_exception = false
p b.run # => #<Thread:0x00007fc3f48aefc0 (irb):4 dead>
```
- **SEE** [m:Thread.report_on_exception]... -
Thread
# run -> self (10.0) -
停止状態(stop)のスレッドを再開させます。 [m:Thread#wakeup] と異なりすぐにスレッドの切り替えを行います。
...ドを再開させます。
[m:Thread#wakeup] と異なりすぐにスレッドの切り替えを行います。
- **raise** `ThreadError` -- 死んでいるスレッドに対して実行すると発生します。
```ruby title="例"
a = Thread.new { puts "a"; Thread.stop; puts "c" }
sleep 0.1 wh......ile a.status!='sleep'
puts "Got here"
a.run
a.join
# => a
# => Got here
# => c
```
- **SEE** [m:Thread#wakeup], [m:Thread.stop]... -
Thread
# set _ trace _ func(pr) -> Proc | nil (10.0) -
{: since="1.9.2"}
...。
nil を渡すとトレースを解除します。
設定したハンドラを返します。
```ruby title="例"
th = Thread.new do
class Trace
end
2.to_s
Thread.current.set_trace_func nil
3.to_s
end
th.set_trace_func lambda {|*arg| p arg }
th.join
# => ["line", "example.rb", 2, ni......>, Thread]
# => ["c-return", "example.rb", 5, :current, #<Binding:0x00007fc8de9673b0>, Thread]
# => ["c-call", "example.rb", 5, :set_trace_func, #<Binding:0x00007fc8de966fc8>, Thread]
```
- **param** `pr` -- トレースハンドラ([c:Proc] オブジェクト) もしくは nil
- **SEE** [m:Thread#... -
Thread
# status -> String | false | nil (10.0) -
生きているスレッドの状態を文字列 "run"、"sleep", "aborting" のいずれかで返します。正常終了したスレッドに対して false、例外により終了したスレッドに対して nil を返します。
...:Thread#alive?] が真を返すなら、このメソッドも真です。
```ruby title="例"
p Thread.current.status # => "run"
a = Thread.new { raise("die now") }
sleep 0.1
p a.status # => nil
b = Thread.new { Thread.stop }
sleep 0.1
p b.status # => "sleep"
c = Thread.......new { Thread.exit }
sleep 0.1
p c.status # => false
d = Thread.new { sleep }
sleep 0.1
p d.status # => "sleep"
d.kill
sleep 0.1
p d.status # => false
```
- **SEE** [m:Thread#alive?], [m:Thread#stop?]... -
Thread
# stop? -> bool (10.0) -
スレッドが終了(dead)あるいは停止(stop)している時、true を返します。
...スレッドが終了(dead)あるいは停止(stop)している時、true を返します。
```ruby title="例"
a = Thread.new { Thread.stop }
b = Thread.current
p a.stop? # => true
p b.stop? # => false
```
- **SEE** [m:Thread#alive?], [m:Thread#status]... -
Thread
# terminate -> self (10.0) -
スレッドの実行を終了させます。終了時に ensure 節が実行されます。
...m:Thread#value] の返り値は不定です。
自身がメインスレッドであるか最後のスレッドである場合は、プロセスを [`exit(0)`](m:Kernel?.exit)
により終了します。
[m:Kernel?.exit] と違い例外 [c:SystemExit] を発生しません。
```ruby
th1 = Thread.... -
Thread
# thread _ variable?(key) -> bool (10.0) -
引数 key で指定した名前のスレッドローカル変数が存在する場合に true、そうでない場合に false を返します。
...名を [c:String] か [c:Symbol] で指定します。
```ruby
me = Thread.current
me.thread_variable_set(:oliver, "a")
p me.thread_variable?(:oliver) # => true
p me.thread_variable?(:stanley) # => false
```
[注意]: [m:Thread#\[\]] でセットしたローカル変数(Fiber ローカル変数)......が対象ではない事に注意してください。
- **SEE** [m:Thread#thread_variable_get], [m:Thread#\[\]]... -
Thread
# thread _ variable _ get(key) -> object | nil (10.0) -
引数 key で指定した名前のスレッドローカル変数を返します。
...[m:Thread#\[\]] でセットしたローカル変数(Fiber ローカル変数)と異なり、Fiber を切り替えても同じ変数を返す事に注意してください。
```ruby title="例"
Thread.new {
Thread.current.thread_variable_set("foo", "bar") # スレッドローカル
Thread.cur......
Thread.current.thread_variable_get("foo"), # スレッドローカル
Thread.current["foo"], # Fiber ローカル
]
}.resume
}.join.value # => ['bar', nil]
```
この例の "bar" は [m:Thread#thread_variable_get] により得られた値で、nil は[m:Thread......#\[\]] により得られた値です。
- **SEE** [m:Thread#thread_variable_set], [m:Thread#\[\]]
- **SEE** <https://magazine.rubyist.net/articles/0041/0041-200Special-note.html>... -
Thread
# thread _ variable _ set(key , value) (10.0) -
引数 key で指定した名前のスレッドローカル変数に引数 value をセットします。
...[m:Thread#\[\]] でセットしたローカル変数(Fiber ローカル変数)と異なり、セットした変数は Fiber を切り替えても共通で使える事に注意してください。
```ruby title="例"
thr = Thread.new do
Thread.current.thread_variable_set(:cat, 'meow')
Thread.cu......rrent.thread_variable_set("dog", 'woof')
end
p thr.join # => #<Thread:0x401b3f10 dead>
p thr.thread_variables # => [:cat, :dog]
```
- **SEE** [m:Thread#thread_variable_get], [m:Thread#thread_variables], [m:Thread#\[\]]... -
Thread
# thread _ variables -> [Symbol] (10.0) -
スレッドローカル変数の名前を [c:Symbol] の配列で返します。
...:Thread#\[\]] でセットしたローカル変数(Fiber ローカル変数)は対象ではない事に注意してください。
```ruby title="例"
thr = Thread.new do
Thread.current.thread_variable_set(:cat, 'meow')
Thread.current.thread_variable_set("dog", 'woof')
end
thr.join
p thr.thread......_variables # => [:cat, :dog]
```
- **SEE** [m:Thread#thread_variable_get], [m:Thread#thread_variable?], [m:Thread#\[\]]... -
Thread
# to _ s -> String (10.0) -
{: since=""}
...{: since=""}
自身を人間が読める形式に変換した文字列を返します。
```ruby title="例"
a = Thread.current
p a.inspect # => "#<Thread:0x00007fdbaf07ddb0 run>"
b = Thread.new{}
p b.inspect # => "#<Thread:0x00007fdbaf8f7d10 (irb):3 dead>"
```... -
Thread
# value -> object (10.0) -
スレッド self が終了するまで待ち([m:Thread#join] と同じ)、そのスレッドのブロックが返した値を返します。スレッド実行中に例外が発生した場合には、その例外を再発生させます。
...ド self が終了するまで待ち([m:Thread#join] と同じ)、そのスレッドのブロックが返した値を返します。スレッド実行中に例外が発生した場合には、その例外を再発生させます。
スレッドが [m:Thread#kill] によって終了した場合は......の終了を待ち結果を出力する例です。
```ruby
threads = []
threads.push(Thread.new { n = rand(5); sleep n; n })
threads.push(Thread.new { n = rand(5); sleep n; n })
threads.push(Thread.new { n = rand(5); sleep n; n })
threads.each {|t| p t.value}
```
最後の行で、待ち合わ......せを行っていることがわかりにくいと思うなら以下のように書くこともできます。
```ruby
threads.each {|t| p t.join.value}
```... -
Thread
# wakeup -> self (10.0) -
停止状態(stop)のスレッドを実行可能状態(run)にします。
...(run)にします。
- **raise** `ThreadError` -- 死んでいるスレッドに対して実行すると発生します。
```ruby title="例"
c = Thread.new { Thread.stop; puts "hey!" }
sleep 0.1 while c.status!='sleep'
c.wakeup
c.join
# => "hey!"
```
- **SEE** [m:Thread#run], [m:Thread.stop]... -
Thread
. DEBUG -> Integer (10.0) -
スレッドのデバッグレベルを返します。
...に出力します。
初期値は 0 です。
使用するためには、THREAD_DEBUG を -1 にして Ruby をコンパイルする必要があります。通常配布されている Ruby では利用できません。
```ruby title="例"
p Thread.DEBUG # => 0
```
- **SEE** [m:Thread.DEBUG=]... -
Thread
. DEBUG=(val) (10.0) -
スレッドのデバッグレベルを val に設定します。
...ます。
使用するためには、THREAD_DEBUG を -1 にして Ruby をコンパイルする必要があります。通常配布されている Ruby では利用できません。
```ruby title="例"
p Thread.DEBUG # => 0
Thread.DEBUG = 1
p Thread.DEBUG # => 1
```
- **SEE** [m:Thread.DEBUG]... -
Thread
. abort _ on _ exception -> bool (10.0) -
真の時は、いずれかのスレッドが例外によって終了した時に、その例外をメインスレッドで再度発生させます。メインスレッドがその例外を捕捉しない限り、結果としてインタプリタ全体が終了します。false の場合、あるスレッドで起こった例外は、[m:Thread#join] などで検出されない限りそのスレッドだけをなにも警告を出さずに終了させます。
...se の場合、あるスレッドで起こった例外は、[m:Thread#join]
などで検出されない限りそのスレッドだけをなにも警告を出さずに終了させます。
デフォルトは false です。
[ref:c:Thread#exception]を参照してください。
- **param** `newsta......レッド実行中に例外が発生した場合、その例外をメインスレッドで再度発生させるかどうかを true か false で指定します。
```ruby title="例"
p Thread.abort_on_exception # => false
Thread.abort_on_exception = true
p Thread.abort_on_exception # => true
```... -
Thread
. abort _ on _ exception=(newstate) (10.0) -
真の時は、いずれかのスレッドが例外によって終了した時に、その例外をメインスレッドで再度発生させます。メインスレッドがその例外を捕捉しない限り、結果としてインタプリタ全体が終了します。false の場合、あるスレッドで起こった例外は、[m:Thread#join] などで検出されない限りそのスレッドだけをなにも警告を出さずに終了させます。
...se の場合、あるスレッドで起こった例外は、[m:Thread#join]
などで検出されない限りそのスレッドだけをなにも警告を出さずに終了させます。
デフォルトは false です。
[ref:c:Thread#exception]を参照してください。
- **param** `newsta......レッド実行中に例外が発生した場合、その例外をメインスレッドで再度発生させるかどうかを true か false で指定します。
```ruby title="例"
p Thread.abort_on_exception # => false
Thread.abort_on_exception = true
p Thread.abort_on_exception # => true
```... -
Thread
. current -> Thread (10.0) -
現在実行中のスレッド(カレントスレッド)を返します。
...現在実行中のスレッド(カレントスレッド)を返します。
```ruby
p Thread.current # => #<Thread:0x4022e6fc run>
```... -
Thread
. exit -> () (10.0) -
カレントスレッドに対して [m:Thread#exit] を呼びます。
...カレントスレッドに対して [m:Thread#exit] を呼びます。... -
Thread
. fork(*arg) {|*arg| . . . } -> Thread (10.0) -
スレッドを生成して、ブロックの評価を開始します。 生成したスレッドを返します。
...スレッドを生成して、ブロックの評価を開始します。
生成したスレッドを返します。
基本的に [m:Thread.new] と同じですが、
new メソッドと違い initialize メソッドを呼びません。
- **param** `arg` -- 引数 arg はそのままブロック......開始と同時にそのスレッド固有のローカル変数に値を渡すために使用します。
- **raise** `ThreadError` -- 現在のスレッドが属する [c:ThreadGroup] が freeze されている場合に発生します。またブロックを与えられずに呼ばれた場合に......間違いです。スレッドの実行が開始される前に変数 i が書き変わる可能性があるからです。
```ruby
for i in 1..5
Thread.start { p i }
end
```
上の例は以下のように書き直すべきです。
```ruby
for i in 1..5
Thread.start(i) {|t| p t }
end
```... -
Thread
. handle _ interrupt(hash) { . . . } -> object (10.0) -
スレッドの割り込みのタイミングを引数で指定した内容に変更してブロックを実行します。
...を引数で指定した内容に変更してブロックを実行します。
「割り込み」とは、非同期イベントや [m:Thread#raise] や
[m:Thread#kill]、[m:Signal?.trap] (未サポート)、メインスレッドの終了
(メインスレッドが終了すると、他のスレッド... -
Thread
. ignore _ deadlock -> bool (10.0) -
デッドロック検知を無視する機能のon/offを返します。
...デッドロック検知を無視する機能のon/offを返します。
デフォルト値はfalseで、デッドロックが検知されます。
- **SEE** [m:Thread.ignore_deadlock=]... -
Thread
. ignore _ deadlock=(bool) (10.0) -
デッドロック検知を無視する機能をon/offします。デフォルト値はfalseです。
...。
trueを渡すとデッドロックを検知しなくなります。
```ruby
Thread.ignore_deadlock = true
queue = Thread::Queue.new
trap(:SIGUSR1){queue.push "Received signal"}
# ignore_deadlockがfalseだとエラーが発生する
puts queue.pop
```
- **SEE** [m:Thread.ignore_deadlock]... -
Thread
. kill(thread) -> Thread (10.0) -
指定したスレッド thread に対して [m:Thread#exit] を呼びます。終了したスレッドを返します。
...定したスレッド thread に対して [m:Thread#exit] を呼びます。終了したスレッドを返します。
- **param** `thread` -- 終了したい Thread オブジェクトを指定します。
```ruby
th = Thread.new do
end
p Thread.kill(th) # => #<Thread:0x40221bc8 dead>
```... -
Thread
. list -> [Thread] (10.0) -
全ての生きているスレッドを含む配列を生成して返します。aborting 状態であるスレッドも要素に含まれます。
...全ての生きているスレッドを含む配列を生成して返します。aborting 状態であるスレッドも要素に含まれます。
```ruby
Thread.new do
sleep
end
sleep 0.1
p Thread.list # => [#<Thread:0x40377a54 sleep>, #<Thread:0x4022e6fc run>]
```... -
Thread
. main -> Thread (10.0) -
メインスレッドを返します。
...メインスレッドを返します。
```ruby
p Thread.main # => #<Thread:0x4022e6fc run>
```... -
Thread
. new(*arg) {|*arg| . . . } -> Thread (10.0) -
スレッドを生成して、ブロックの評価を開始します。 生成したスレッドを返します。
...開始と同時にそのスレッド固有のローカル変数に値を渡すために使用します。
- **raise** `ThreadError` -- 現在のスレッドが属する [c:ThreadGroup] が freeze されている場合に発生します。またブロックを与えられずに呼ばれた場合に......は間違いです。スレッドの実行が開始される前に変数 i が書き変わる可能性があるからです。
```ruby
for i in 1..5
Thread.new { p i }
end
```
上の例は以下のように書き直すべきです。
```ruby
for i in 1..5
Thread.new(i) {|t| p t }
end
```... -
Thread
. pass -> nil (10.0) -
他のスレッドに実行権を譲ります。実行中のスレッドの状態を変えずに、他の実行可能状態のスレッドに切り替わるよう、スレッドスケジューラにヒントを与えます。実際に切り替わるかどうか、また次にどのスレッドが実行されるかは OS やスケジューラの実装に依存するため、保証されません。
...されるかは OS
やスケジューラの実装に依存するため、保証されません。
```ruby
Thread.new do
(1..3).each{|i|
p i
Thread.pass
}
exit
end
loop do
Thread.pass
p :main
end
# =>
1
:main
2
:main
3
:main
```
上記の出力は一例です。実行環境に... -
Thread
. pending _ interrupt?(error = nil) -> bool (10.0) -
非同期割り込みのキューが空かどうかを返します。
...ます。
[m:Thread.handle_interrupt] は非同期割り込みの発生を延期させるのに使用しますが、本メソッドは任意の非同期割り込みが存在するかどうかを確認するのに使用します。
本メソッドが true を返した場合、[m:Thread.handle_inter......ラスを指定します。省略した場合は全ての例外を対象に確認を行います。
例: 延期させられていた例外をただちに発生させる。
```ruby
def Thread.kick_interrupt_immediately
Thread.handle_interrupt(Object => :immediate) {
Thread.pass
}
end
```... -
Thread
. report _ on _ exception -> bool (10.0) -
真の時は、いずれかのスレッドが例外によって終了した時に、その内容を $stderr に報告します。
...に、その内容を $stderr に報告します。
デフォルトは true です。
```ruby
Thread.new { 1.times { raise } }
```
は $stderr に以下のように出力します:
```text
#<Thread:...> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
2......ッドが終了しないようにするのがより良い方法です。
- [m:Thread#join] や [m:Thread#value] でそのスレッドの終了を待つことが保証できるなら、
スレッド開始時に Thread.current.report_on_exception = false でレポートを無効化しても
安......クされていて
終了を待つことができなかったりするかもしれません。
スレッドごとに設定する方法は [m:Thread#report_on_exception=] を参照してください。
- **param** `newstate` -- スレッド実行中に例外発生した場合、その内容を... -
Thread
. report _ on _ exception=(newstate) (10.0) -
真の時は、いずれかのスレッドが例外によって終了した時に、その内容を $stderr に報告します。
...に、その内容を $stderr に報告します。
デフォルトは true です。
```ruby
Thread.new { 1.times { raise } }
```
は $stderr に以下のように出力します:
```text
#<Thread:...> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
2......ッドが終了しないようにするのがより良い方法です。
- [m:Thread#join] や [m:Thread#value] でそのスレッドの終了を待つことが保証できるなら、
スレッド開始時に Thread.current.report_on_exception = false でレポートを無効化しても
安......クされていて
終了を待つことができなかったりするかもしれません。
スレッドごとに設定する方法は [m:Thread#report_on_exception=] を参照してください。
- **param** `newstate` -- スレッド実行中に例外発生した場合、その内容を... -
Thread
. start(*arg) {|*arg| . . . } -> Thread (10.0) -
スレッドを生成して、ブロックの評価を開始します。 生成したスレッドを返します。
...スレッドを生成して、ブロックの評価を開始します。
生成したスレッドを返します。
基本的に [m:Thread.new] と同じですが、
new メソッドと違い initialize メソッドを呼びません。
- **param** `arg` -- 引数 arg はそのままブロック......開始と同時にそのスレッド固有のローカル変数に値を渡すために使用します。
- **raise** `ThreadError` -- 現在のスレッドが属する [c:ThreadGroup] が freeze されている場合に発生します。またブロックを与えられずに呼ばれた場合に......間違いです。スレッドの実行が開始される前に変数 i が書き変わる可能性があるからです。
```ruby
for i in 1..5
Thread.start { p i }
end
```
上の例は以下のように書き直すべきです。
```ruby
for i in 1..5
Thread.start(i) {|t| p t }
end
```... -
Thread
. stop -> nil (10.0) -
他のスレッドから [m:Thread#run] メソッドで再起動されるまで、カレントスレッドの実行を停止します。
...[m:Thread#run] メソッドで再起動されるまで、カレントスレッドの実行を停止します。
```ruby title="例"
a = Thread.new { print "a"; Thread.stop; print "c" }
sleep 0.1 while a.status!='sleep'
print "b"
a.run
a.join
# => "abc"
```
- **SEE** [m:Thread#run], [m:Thread#wake...
