📜  红宝石 |线程类-公共类方法

📅  最后修改于: 2022-05-13 01:54:40.098000             🧑  作者: Mango

红宝石 |线程类-公共类方法

在 Ruby 中,线程用于实现并发编程模块。需要多个线程的程序,使用Thread 类来创建线程。 Thread 类包含执行某些指定任务的范围广泛的方法。

公共类方法

  1. abort_on_exception :此方法返回全局“异常中止”条件的状态。此方法的默认值为 false。如果此方法的值设置为 true,那么它将中止引发异常的所有线程。
    Thread.abort_on_exception -> true or false
  2. abort_on_exception= :此方法返回新状态。当此方法的值设置为 true 时,它会中止出现异常的线程。此方法的返回类型是布尔值。
    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
    
  3. 关键:此方法返回全局“线程关键”条件。
    Thread.critical -> true or false
  4. critical= :该方法用于设置全局“线程关键”的状态并返回。当该方法的值设置为true时,它禁止调度任何现有线程,并且不阻塞新线程的创建和运行。一些线程操作,如杀死或停止线程、在当前线程中休眠或引发异常,可能会导致线程被调度到临界区。这种方法主要支持人们编写线程库。此方法的返回类型是布尔值。
    Thread.critical= bool -> true or false
  5. current :此方法返回线程的当前执行情况。
    Thread.current -> thread
  6. exit :此方法用于终止当前正在运行的线程并安排另一个线程运行。如果该线程被标记为被杀死,则返回该线程,如果这是主线程或最后一个线程,则退出该进程。
    Thread.exit
  7. fork :此方法类似于 start 方法。
    Thread.fork{block} -> thread
  8. 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
    
  9. 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 }
    

    输出:

    #
    #
    #
    #
    
  10. main :此方法返回进程的主线程。该程序将始终为每次运行返回不同的 id。
    Thread.main -> thread
    # Ruby program to print the id 
    # of main thread
       
    # using the main method
    puts Thread.main      
    

    输出:

    #
  11. new :此方法用于创建和运行新线程以执行块中给出的指令。传递给此方法的任何参数都在块中传递。
    Thread.new([arguments]*){|arguments|block} -> thread
  12. pass :此方法试图将执行传递给另一个线程,但执行的切换取决于操作系统。
    Thread.pass
  13. start :此方法类似于新方法。如果 Thread 类是子类,那么从子类调用 start 将不会调用子类的初始化方法。
    Thread.start([arguments]*){|arguments|block} -> thread
  14. stop :此方法用于通过使当前正在运行的线程进入睡眠状态来停止执行并安排另一个线程的执行,将临界条件重置为 false。
    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

    参考: https://ruby-doc.org/core-2.5.0/Thread.html#class