国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

初步講解Ruby編程中的多線程

2019-10-26 19:25:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

每個(gè)正在系統(tǒng)上運(yùn)行的程序都是一個(gè)進(jìn)程。每個(gè)進(jìn)程包含一到多個(gè)線程。

線程是程序中一個(gè)單一的順序控制流程,在單個(gè)程序中同時(shí)運(yùn)行多個(gè)線程完成不同的工作,稱為多線程。

Ruby 中我們可以通過(guò) Thread 類來(lái)創(chuàng)建多線程,Ruby的線程是一個(gè)輕量級(jí)的,可以以高效的方式來(lái)實(shí)現(xiàn)并行的代碼。
創(chuàng)建 Ruby 線程

要啟動(dòng)一個(gè)新的線程,只需要調(diào)用 Thread.new 即可:

# 線程 #1 代碼部分Thread.new { # 線程 #2 執(zhí)行代碼}# 線程 #1 執(zhí)行代碼

實(shí)例

以下實(shí)例展示了如何在Ruby程序中使用多線程:

#!/usr/bin/ruby def func1  i=0  while i<=2   puts "func1 at: #{Time.now}"   sleep(2)   i=i+1  endend def func2  j=0  while j<=2   puts "func2 at: #{Time.now}"   sleep(1)   j=j+1  endend puts "Started At #{Time.now}"t1=Thread.new{func1()}t2=Thread.new{func2()}t1.joint2.joinputs "End at #{Time.now}"

以上代碼執(zhí)行結(jié)果為:

Started At Wed May 14 08:21:54 -0700 2014func1 at: Wed May 14 08:21:54 -0700 2014func2 at: Wed May 14 08:21:54 -0700 2014func2 at: Wed May 14 08:21:55 -0700 2014func1 at: Wed May 14 08:21:56 -0700 2014func2 at: Wed May 14 08:21:56 -0700 2014func1 at: Wed May 14 08:21:58 -0700 2014End at Wed May 14 08:22:00 -0700 2014

線程生命周期

1、線程的創(chuàng)建可以使用Thread.new,同樣可以以同樣的語(yǔ)法使用Thread.start 或者Thread.fork這三個(gè)方法來(lái)創(chuàng)建線程。

2、創(chuàng)建線程后無(wú)需啟動(dòng),線程會(huì)自動(dòng)執(zhí)行。

3、Thread 類定義了一些方法來(lái)操控線程。線程執(zhí)行Thread.new中的代碼塊。

4、線程代碼塊中最后一個(gè)語(yǔ)句是線程的值,可以通過(guò)線程的方法來(lái)調(diào)用,如果線程執(zhí)行完畢,則返回線程值,否則不返回值直到線程執(zhí)行完畢。

5、Thread.current 方法返回表示當(dāng)前線程的對(duì)象。 Thread.main 方法返回主線程。

6、通過(guò) Thread.Join 方法來(lái)執(zhí)行線程,這個(gè)方法會(huì)掛起主線程,直到當(dāng)前線程執(zhí)行完畢。
線程狀態(tài)

線程有5種狀態(tài):

2015410100905173.jpg (800×258)

線程和異常

當(dāng)某線程發(fā)生異常,且沒(méi)有被rescue捕捉到時(shí),該線程通常會(huì)被無(wú)警告地終止。但是,若有其它線程因?yàn)門(mén)hread#join的關(guān)系一直等待該線程的話,則等待的線程同樣會(huì)被引發(fā)相同的異常。

begin t = Thread.new do  Thread.pass  # 主線程確實(shí)在等join  raise "unhandled exception" end t.joinrescue p $! # => "unhandled exception"end

使用下列3個(gè)方法,就可以讓解釋器在某個(gè)線程因異常而終止時(shí)中斷運(yùn)行。

    啟動(dòng)腳本時(shí)指定-d選項(xiàng),并以調(diào)試模時(shí)運(yùn)行。     用Thread.abort_on_exception設(shè)置標(biāo)志。     使用Thread#abort_on_exception對(duì)指定的線程設(shè)定標(biāo)志。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 工布江达县| 裕民县| 淳安县| 金寨县| 尉氏县| 茌平县| 含山县| 大同县| 社旗县| 丰原市| 都昌县| 和田市| 遂平县| 尉氏县| 游戏| 察哈| 板桥市| 普定县| 商水县| 宁国市| 普兰县| 罗江县| 奉新县| 任丘市| 阳城县| 隆昌县| 滦平县| 兰溪市| 四子王旗| 曲沃县| 西乌珠穆沁旗| 二连浩特市| 霍邱县| 白城市| 广平县| 普兰店市| 四会市| 海晏县| 涟源市| 开平市| 蒙城县|