999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

Java語(yǔ)言與C#語(yǔ)言的多線程編程能力和差異

2012-08-15 00:44:25黑龍江吳文慶修雅慧
職業(yè)技術(shù) 2012年4期
關(guān)鍵詞:程序語(yǔ)言方法

黑龍江 吳文慶 修雅慧

Java語(yǔ)言與C#語(yǔ)言的多線程編程能力和差異

黑龍江 吳文慶 修雅慧

Java與C#是現(xiàn)今網(wǎng)絡(luò)開(kāi)發(fā)的兩大主要平臺(tái),而多線程編程則是進(jìn)行并行處理計(jì)算中的基礎(chǔ),本文主要闡述了在Java與C#開(kāi)發(fā)平臺(tái)下如何進(jìn)行多線程編程的方法及注意事項(xiàng),并且比較和分析兩種開(kāi)發(fā)平臺(tái)下進(jìn)行多線程編程的差異。

多線程;并行處理;Java;C#

從概念上講,線程提供了一種在一個(gè)軟件中并行執(zhí)行代碼的方式——每個(gè)線程都“同時(shí)”在一個(gè)共享的內(nèi)存空間中執(zhí)行指令(當(dāng)然是在一個(gè)處理器上,這是通過(guò)處于運(yùn)行狀態(tài)的線程的交替執(zhí)行完成的),因此,每個(gè)線程都可以訪問(wèn)一個(gè)程序內(nèi)的數(shù)據(jù)結(jié)構(gòu)。由于這種原因,多線程編程的難度就可想而知了,因?yàn)橐粋€(gè)程序內(nèi)有許多不同的線程需要安全地共享數(shù)據(jù)。

一、線程的創(chuàng)建和運(yùn)行

Java在Java.lang.Thread和Java.lang.Runnable類中提供了大部分的線程功能。創(chuàng)建一個(gè)線程非常簡(jiǎn)單,就是擴(kuò)展Thread類,并調(diào)用start()。通過(guò)創(chuàng)建一個(gè)執(zhí)行Runnable()的類,并將該類作為參數(shù)傳遞給Thread(),也可以定義一個(gè)線程。

下面這個(gè)簡(jiǎn)單的Java程序,其中有2個(gè)線程同時(shí)在從1數(shù)到5,并將結(jié)果打印出來(lái)。

public class ThreadingExample extends Object

public static void main(Stringargs[]){

Thread[]threads=new Thread[2];

for(int count=1;count<=threads.length;count){

threads[count]=new Thread(new Runnable()

{

public void run(){

count();

}}

threads[count].start();

}}

public static void count(){

for(int count=1;count<=5;count)

System.out.print(count””);

}

}

可以使用System.Threading.Thread和System.Threading.ThreadStart兩個(gè)類將上述的Java程序轉(zhuǎn)換為C#語(yǔ)言:

using System.Threading;

public class ThreadingExample:Object{

public static void Main(){

Thread[]threads=new Thread[2];

for(int count=1;count<=threads.Length;count){

threads[count」=new Thread(new ThreadStart(Count));

threads[count].Start();

}

}

public static void Count(){

for(int count=1;count<=5;count)

Console.Write(count””);

}

}

二、線程的使用

Java中存在許多編程人員希望能夠?qū)€程使用的標(biāo)準(zhǔn)操作:例如,測(cè)試線程是否存在、加人一個(gè)線程直到它死亡、殺死一個(gè)線程等。

Java中java.lang.Thread中的方法和C#中System.Threading.Thread對(duì)象的對(duì)比:

setDaemon(boolean on)方法:IsBackground設(shè)置屬性值使一個(gè)存在的進(jìn)程成為一個(gè)新線程(如果剩下的所有進(jìn)程都成了新線程,程序?qū)⑼V惯\(yùn)行)。

isDaemon()方法:IsBackground 獲取屬性,如果該線程是一個(gè)后臺(tái)線程,則返回真值。

isAlive()方法:IsAlive獲取屬性,如果該線程處于活動(dòng)狀態(tài),則返回真值。

Interrupt()方法:盡管在Java中這一方法可以用來(lái)設(shè)置線程的中斷狀態(tài),而且可以用來(lái)檢查線程是否被中斷。在C#中沒(méi)有相應(yīng)的方法,對(duì)一個(gè)沒(méi)有處于阻塞狀態(tài)的線程執(zhí)行Interrupt方法將使下一次阻塞調(diào)用自動(dòng)失效。

isInterrupted()方法:n/a,如果該線程處于阻塞狀態(tài),則返回真值。

sleep(long millis) 和 sleep(long millis,intnanos),Sleep (int millisecond Timeout)and Sleep(System.TimeSpan)方法:使正在執(zhí)行的線程暫停一段給定的時(shí)間,或直到它被中斷。這一方法將在Java中將產(chǎn)生一個(gè)java.lang.InterruptedException狀態(tài),在C#中將產(chǎn)生System..Threading.ThreadInterruptedException狀態(tài)。

Join(),join(long millis)和 join(long millis,intnanos)方法與Java中僅依靠超時(shí)設(shè)定不同的是,在C#語(yǔ)言中則依據(jù)線程停止運(yùn)行是由于線程死亡(返回真)或是超時(shí)(返回假)而返回一個(gè)布爾型變量。

Suspend()方法:二者的功能相同。這一方法容易引起死循環(huán),如果一個(gè)占有系統(tǒng)關(guān)健資源的線程被掛起來(lái),則在這一線程恢復(fù)運(yùn)行之前,其他的線程不能訪問(wèn)該資源。

Resume()方法:恢復(fù)一個(gè)被掛起的線程。

Stop()方法,Abort()方法:參見(jiàn)下面的“線程中止”部分。

三、線程的中止

由于能夠在沒(méi)有任何征兆的情況下使運(yùn)行的程序進(jìn)人一種混亂的狀態(tài),Java中的Thread.stop受到了普遍的反對(duì)。根據(jù)所調(diào)用的stop()方法,一個(gè)未經(jīng)檢查的Java.lang.ThreadDeath錯(cuò)誤將會(huì)破壞正在運(yùn)行著的程序的棧,隨著它的不斷運(yùn)行,能夠解除任何被鎖定的對(duì)象。由于這些鎖被不分青紅皂白地被打開(kāi),由它們所保護(hù)的數(shù)據(jù)就非常可能陷人混亂狀態(tài)中。根據(jù)當(dāng)前的Java文檔,推薦的中止一個(gè)線程的方法是讓運(yùn)行的線程檢查一個(gè)由其他的線程能夠改變的變量,該變量代表一個(gè)“死亡時(shí)間”條件。

上述的討論對(duì)C#中的Abort方法也適合。根據(jù)調(diào)用的Abort方法,System.Threading.ThreadAbortException可能會(huì)破壞線程的棧,它可能釋放線程保持的一些變量,使處于保護(hù)狀態(tài)中的數(shù)據(jù)結(jié)構(gòu)出現(xiàn)不可預(yù)測(cè)的錯(cuò)誤。我建議使用與上面所示的相似的方法來(lái)通知一個(gè)應(yīng)該死亡的線程。

四、結(jié)束語(yǔ)

本文章中重點(diǎn)討論了Java和C#在多線程編程方面的具體實(shí)現(xiàn)方法,闡述了兩者實(shí)現(xiàn)的不同之處,并實(shí)現(xiàn)了Java中多線程編程的常用模式轉(zhuǎn)換為C#。

[1]Bruce Eckel(陳昊鵬,譯).Java編程思想(第4版)[M].北京:機(jī)械工業(yè)出版社,2007.

[2]Kathy Sierra,Bert Bates.深入淺出Java[M].影印版·南京:東南大學(xué)出版社,2005.

[3]Cay S.Hoistmann,Gary cornell(陳昊鵬,王浩,姚建平,等譯).Java 2核心技術(shù)[M].北京:機(jī)械工業(yè)出版社,2006.

(編輯 李艷華)

(作者單位:吳文慶,齊齊哈爾工程學(xué)院;修雅慧,齊齊哈爾醫(yī)學(xué)院)

猜你喜歡
程序語(yǔ)言方法
語(yǔ)言是刀
文苑(2020年4期)2020-05-30 12:35:30
試論我國(guó)未決羈押程序的立法完善
讓語(yǔ)言描寫(xiě)搖曳多姿
“程序猿”的生活什么樣
英國(guó)與歐盟正式啟動(dòng)“離婚”程序程序
累積動(dòng)態(tài)分析下的同聲傳譯語(yǔ)言壓縮
用對(duì)方法才能瘦
Coco薇(2016年2期)2016-03-22 02:42:52
創(chuàng)衛(wèi)暗訪程序有待改進(jìn)
四大方法 教你不再“坐以待病”!
Coco薇(2015年1期)2015-08-13 02:47:34
我有我語(yǔ)言
主站蜘蛛池模板: 亚洲国模精品一区| 国产一级片网址| 精品视频在线观看你懂的一区| 日本欧美中文字幕精品亚洲| 精品国产成人a在线观看| 国产视频你懂得| 中文字幕免费播放| 亚洲福利一区二区三区| 99久久国产精品无码| 69视频国产| 扒开粉嫩的小缝隙喷白浆视频| 婷婷丁香在线观看| 天堂中文在线资源| 亚洲精选无码久久久| 国产成人综合日韩精品无码不卡| 午夜成人在线视频| 国产精品一线天| 国产黄色视频综合| 精品国产91爱| 色婷婷天天综合在线| 欧美成人精品在线| 性欧美在线| 日韩欧美中文| 无码免费视频| 久久国产乱子| 亚洲成人高清在线观看| 欧美黄网站免费观看| 狠狠色成人综合首页| 美女毛片在线| 青青草原国产免费av观看| 国产人碰人摸人爱免费视频| 美女视频黄频a免费高清不卡| www成人国产在线观看网站| 伊人网址在线| 精品少妇人妻一区二区| 男女性午夜福利网站| 人妻21p大胆| 亚洲天堂网2014| 久久亚洲AⅤ无码精品午夜麻豆| 久久美女精品国产精品亚洲| 欧美成人看片一区二区三区| 亚洲不卡影院| 成人免费一区二区三区| 熟妇无码人妻| 国产毛片片精品天天看视频| 四虎国产精品永久一区| 亚洲欧美极品| 亚洲 欧美 偷自乱 图片| 欧美精品在线免费| 亚洲热线99精品视频| 亚洲欧美另类日本| 性网站在线观看| 尤物视频一区| 成人精品视频一区二区在线| 很黄的网站在线观看| 伊人久久大线影院首页| 9cao视频精品| 青草视频在线观看国产| 国产在线观看91精品| 国产精品所毛片视频| 国产精品无码AV片在线观看播放| 高清码无在线看| 免费看a毛片| 人与鲁专区| 国产精品尤物铁牛tv| 国产黄在线免费观看| 精品无码一区二区三区在线视频| 国产精品吹潮在线观看中文| 男女精品视频| 97国产在线视频| 国产无码网站在线观看| 国产精品视频a| 国产尤物jk自慰制服喷水| 狠狠色综合久久狠狠色综合| 91精品视频播放| 欧美久久网| 无码久看视频| 国产99精品久久| 国产精品2| 亚洲AV无码不卡无码| 日本午夜在线视频| 在线播放91|