Ruby |线程生命周期及其状态

线程生命周期提供了线程从出生到结束的简要描述。可以在的帮助下创建一个新线程 线新 线开始 线叉 方法。创建后无需启动新线程。当CPU资源可用时,线程自动开始运行。价值 线新 引用是一个线程对象。Thread类提供了多种方法来查询和操作线程。 线程运行到与调用相关的代码块中 线新 然后停止跑步。thread块中最后一个表达式的值是线程的值,该值是通过调用thread对象的value方法获得的。value方法仅在线程已完全运行时返回值,否则不会将值返回到完全运行的线程。如果线程中出现异常,那么它会终止正在运行的线程。此条件仅适用于非主线程的线程,以及包含异常的终止线程。

null

线程状态

在Ruby中,有五种状态可用于显示线程状态的线程。您可以使用 活着的 地位 方法。

  1. 可运行: 当前正在运行或准备在CPU资源可用时获取CPU资源的线程。
  2. 睡觉: 当前正在睡眠、正在等待IO或自身已停止的线程。
  3. 中止: 它是一种中间状态。一种正在中止的线程,它已被终止,但尚未终止。
  4. 例外情况下终止: 一个线程包含异常,或者换句话说,一个线程由于异常的出现而终止。
  5. 正常终止: 正常终止或不包含异常并完成其工作的线程。

    例子:

    # Ruby program to illustrate
    # check status of thread
    counter = 0
    # creating new thread
    x = Thread . new { loop { counter += 1 } }
    # check thread alive or not
    puts x.alive?

    
    

    输出:

    true

图片[1]-Ruby |线程生命周期及其状态-yiteyi-C++库

下表显示了状态名称及其返回值:

返回值
可运行的
睡觉 睡觉
流产 流产
正常终止 错误的
例外终止

主线

在Ruby中,主线程是多线程的一个特殊部分。它是程序的最高线程,所有子线程都在该线程下运行,或者换句话说,它是父线程,同一程序的其他线程是主线程的子线程。主线程是在 主要的 方法当主线程的工作完成时,Ruby解释器停止运行意味着主线程和子线程完成了它们的任务。课堂教学法 线主要的 返回代表主线程的线程对象。如果在主线程中引发异常,而在任何地方都没有处理,Ruby解释器将打印一条消息或退出。如果在主线程以外的线程中引发异常,那么Ruby解释器会终止包含异常的线程

例子:

# Ruby program to illustrate
# main thread
# Create main thread
puts Thread .main
puts ""
# create new thread
a1 = Thread . new {sleep 200 }
list_thread= Thread .list
list_thread. each {|t| p t }
puts "Current thread = " + Thread .current.to_s
# create new thread
a2 = Thread . new {sleep 200 }
list_thread= Thread .list
list_thread. each {|t| p t }
puts "Current thread=" + Thread .current.to_s
# kill thread a1
Thread .kill(a1)
# pass execution to thread a2
Thread .pass
# kill thread a2
Thread .kill(a2)
list_thread= Thread .list
list_thread. each {|t| p t }
# exit main thread
Thread .exit


输出:

#

# # 当前线程=# # # # 当前线程=# # #

说明: 这个程序显示主线程是如何执行的。首先,我们创建主线程,然后在主线程中有两个子线程,即。 a1 a2 线当线程 a1 完全执行,然后杀死 a1 线程并将执行传递给 a2 线在那次谋杀之后 a2 线程并打印主线程中的线程列表及其状态。当主线程中存在的所有线程都失效时,则主线程存在。

交替线程状态:暂停、唤醒和终止

正如我们所知,线程是在可运行状态下创建的,可以运行。线程通过进入睡眠状态或调用 线停止 方法,或通过调用 内核睡觉 .任何线程都不能被另一个线程强制暂停。如果线程调用 内核睡觉 在没有参数的情况下,它会永远暂停线程,或者直到醒来,如果线程调用 内核睡觉 通过一个参数,它会暂时将线程置于休眠状态。处于临时休眠状态的线程在给定时间到期时自动唤醒,并重新进入可运行状态。

通过呼叫暂停线程 线停止 或者打电话 内核睡觉 可以通过调用实例方法重新开始,即。 醒来,快跑 。这些方法将线程的状态从休眠切换到可运行。run方法还调用线程调度程序。由于线程调度程序的调用,最近唤醒的线程可能会获得CPU资源。wakeup方法在不调用线程调度程序的情况下唤醒特定线程。

一个线程可以通过调用实例方法kill来强制终止另一个线程。终止和退出方法类似于kill方法。这些方法将终止方法置于正常终止状态。杀死线程是一件危险的事情,除非你有一种方法知道线程不在文件共享状态的中间。杀死一根线!方法的危害更大,因为被终止的线程可能会使套接字、文件和其他资源处于打开状态。

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享