Ruby 线程类 公共类方法
在Ruby中,线程被用来实现并发的编程模块。需要多个线程的程序,使用 Thread类来 创建线程。线程类包含了大量的方法来执行一些特定的任务。
公共类方法
- abort_on_exception : 该方法返回全局 “异常时中止 “条件的状态。这个方法的默认值是false。如果这个方法的值被设置为 “true”,那么它将中止所有引发异常的线程。
Thread.abort_on_exception -> true or false
- abort_on_exception= : 该方法返回新的状态。当这个方法的值被设置为 “真 “时,就会中止产生异常的线程。这个方法的返回类型是布尔值。
Thread.abort_on_exception= bool -> true or false
# Ruby program to illustrate
# abort_on_exception Method
Thread.abort_on_exception = true
x = Thread.new do
puts "Welcome to new thread"
raise "Exception is raised in thread"
end
sleep(0.5)
puts "Not Found"
输出:
Welcome to new thread
test.rb:9: Exception is raised in thread (RuntimeError)
from test.rb:6:in `initialize'
from test.rb:6:in `new'
from test.rb:6
- critical : 该方法返回全局 “线程临界 “条件。
Thread.critical -> true or false
- critical= : 这个方法用来设置全局 “线程临界 “的状态,并将其返回。当这个方法的值被设置为 “true “时,那么它就禁止调度任何现有的线程,并且它不会阻止新线程的创建和运行。一些线程操作,如杀死或停止一个线程,在当前线程中睡觉,或引发一个异常,可能会导致一个线程调度在临界区。这个方法主要支持编写线程库的朋友。这个方法的返回类型是布尔值。
Thread.critical= bool -> true or false
- current : 该方法返回线程的当前执行情况。
Thread.current -> thread
- exit : 该方法用于终止当前运行的线程,并安排另一个线程运行。如果这个线程被标记为被杀死,那么它将返回该线程,如果这是主线程或最后一个线程,那么它将退出该进程。
Thread.exit
- fork : 这种方法与启动方法类似。
Thread.fork{block} -> thread
- kill : 该方法用于退出线程。
Thread.kill(thread)
示例:
# Ruby program to illustrate
# kill Method
counter = 0
# creating new thread
x = Thread.new { loop { counter += 1 } }
# using sleep method
sleep(0.4)
# exits the thread using kill method
Thread.kill(x)
# give it time to die!
sleep(0.5)
# return false
x.alive?
输出:
false
- list: 该方法返回所有可运行或已停止的线程对象的一个数组。
Thread.list -> array
示例:
# Ruby program to illustrate
# list Method
# first thread
Thread.new { sleep(100) }
# second thread
Thread.new { 10000.times {|z| z*z } }
# third thread
Thread.new { Thread.stop }
# using list method
Thread.list.each {|thr| p thr }
输出:
#<Thread:0x8795838 sleep>
#<Thread:0x87958e0 run>
#<Thread:0x8795958 sleep>
#<Thread:0x87a4f10 run>
- main : 该方法返回进程的主线程。该程序每次运行都会返回不同的ID。
Thread.main -> thread
# Ruby program to print the id
# of main thread
# using the main method
puts Thread.main
输出:
#<Thread:0xbf04f18>
- new : 该方法用于创建和运行一个新的线程来执行块中给出的指令。任何传递给该方法的参数都会在块中传递。
Thread.new([arguments]*){|arguments|block} -> thread
- pass : 这种方法试图将执行传递给另一个线程,但执行的切换取决于操作系统。
Thread.pass
- start : 这个方法与new方法类似。如果线程类被子类化,那么从子类中调用start将不会调用子类的初始化方法。
Thread.start([arguments]*){|arguments|block} -> thread
- stop : 该方法用于停止当前运行的线程的执行,使其进入睡眠状态,并安排另一个线程的执行,将关键条件重置为假。
Thread.stop
示例:
# Ruby program to illustrate
# stop Method
x = Thread.new { print "geeks"; Thread.stop; print "geeksforgeeks" }
# using pass method
Thread.pass
print "geeksforgeeks"
x.run
x.join
输出:
geeksgeeksforgeeksgeeksforgeeks
Reference: https://ruby-doc.org/core-2.5.0/Thread.html#class