日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
判斷線程運(yùn)行狀態(tài)的兩種方法

判斷線程運(yùn)行狀態(tài)的方法有很多,如可以采用類似于對(duì)象計(jì)數(shù)器的方法,所謂對(duì)象計(jì)數(shù)器,就是一個(gè)對(duì)象被引用一次,這個(gè)計(jì)數(shù)器就加1,銷毀引用就減1,如果引用數(shù)為0,則垃圾搜集器就會(huì)對(duì)這些引用數(shù)為0的對(duì)象進(jìn)行回收。

成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)阿壩州,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108

判斷線程運(yùn)行狀態(tài)方法一:線程計(jì)數(shù)器

線程也可以采用計(jì)數(shù)器的方法,即為所有需要監(jiān)視的線程設(shè)一個(gè)線程計(jì)數(shù)器,每開(kāi)始一個(gè)線程,在線程的執(zhí)行方法中為這個(gè)計(jì)數(shù)器加1,如果某個(gè)線程結(jié)束(在線程執(zhí)行方法的最后為這個(gè)計(jì)數(shù)器減1),為這個(gè)計(jì)數(shù)器減1。然后再開(kāi)始一個(gè)線程,按著一定的時(shí)間間隔來(lái)監(jiān)視這個(gè)計(jì)數(shù)器,如是棕個(gè)計(jì)數(shù)器為0,說(shuō)明所有的線程都結(jié)束了。當(dāng)然,也可以不用這個(gè)監(jiān)視線程,而在每一個(gè)工作線程的最后(在為計(jì)數(shù)器減1的代碼的后面)來(lái)監(jiān)視這個(gè)計(jì)數(shù)器,也就是說(shuō),每一個(gè)工作線程在退出之前,還要負(fù)責(zé)檢測(cè)這個(gè)計(jì)數(shù)器。使用這種方法不要忘了同步這個(gè)計(jì)數(shù)器變量啊,否則會(huì)產(chǎn)生意想不到的后果。

判斷線程運(yùn)行狀態(tài)方法二:使用Thread.join方法

join方法只有在線程結(jié)束時(shí)才繼續(xù)執(zhí)行下面的語(yǔ)句。可以對(duì)每一個(gè)線程調(diào)用它的join方法,但要注意,這個(gè)調(diào)用要在另一個(gè)線程里,而不要在主線程,否則程序會(huì)被阻塞的。

個(gè)人感覺(jué)這種方法比較好。

線程計(jì)數(shù)器方法演示:

 
 
 
 
  1. class ThreadCounter : MyThread  
  2. {  
  3. private static int count = 0;  
  4. private int ms;  
  5. private static void increment()  
  6. {  
  7. lock (typeof(ThreadCounter))  // 必須同步計(jì)數(shù)器  
  8. {  
  9. count++;  
  10. }  
  11. }  
  12. private static void decrease()  
  13. {  
  14. lock (typeof(ThreadCounter))  
  15. {  
  16. count--;  
  17. }  
  18. }  
  19. private static int getCount()  
  20. {  
  21. lock (typeof(ThreadCounter))  
  22. {  
  23. return count;  
  24. }  
  25. }  
  26. public ThreadCounter(int ms)  
  27. {  
  28. this.ms = ms;  
  29. }  
  30. override public void run()  
  31. {  
  32. increment();  
  33. Thread.Sleep(ms);  
  34. Console.WriteLine(ms.ToString()+"毫秒任務(wù)結(jié)束");  
  35. decrease();  
  36. if (getCount() == 0)  
  37. Console.WriteLine("所有任務(wù)結(jié)束");  
  38. }  
  39. }  
  40.  
  41.  
  42. ThreadCounter counter1 = new ThreadCounter(3000);  
  43. ThreadCounter counter2 = new ThreadCounter(5000);  
  44. ThreadCounter counter3 = new ThreadCounter(7000);  
  45.  
  46. counter1.start();  
  47. counter2.start();  
  48. counter3.start();  

上面的代碼雖然在大多數(shù)的時(shí)候可以正常工作,但卻存在一個(gè)隱患,就是如果某個(gè)線程,假設(shè)是counter1,在運(yùn)行后,由于某些原因,其他的線程并未運(yùn)行,在這種情況下,在counter1運(yùn)行完后,仍然可以顯示出“所有任務(wù)結(jié)束”的提示信息,但是counter2和counter3還并未運(yùn)行。為了消除這個(gè)隱患,可以將increment方法從run中移除,將其放到ThreadCounter的構(gòu)造方法中,在這時(shí),increment方法中的lock也可以去掉了。代碼如:

 
 
 
 
  1. public ThreadCounter(int ms)  
  2. {  
  3. this.ms = ms;  
  4. increment();  

運(yùn)行上面的程序后,將顯示如下圖的結(jié)果。

使用Thread.join方法演示

 
 
 
 
  1. private static void threadMethod(Object obj)  
  2. {  
  3. Thread.Sleep(Int32.Parse(obj.ToString()));  
  4. Console.WriteLine(obj + "毫秒任務(wù)結(jié)束");  
  5. }  
  6. private static void joinAllThread(object obj)  
  7. {  
  8. Thread[] threads = obj as Thread[];  
  9. foreach (Thread t in threads)  
  10. t.Join();  
  11. Console.WriteLine("所有的線程結(jié)束");  
  12. }  
  13.  
  14. static void Main(string[] args)  
  15. {  
  16. Thread thread1 = new Thread(threadMethod);  
  17. Thread thread2 = new Thread(threadMethod);  
  18. Thread thread3 = new Thread(threadMethod);  
  19.  
  20.  thread1.Start(3000);  
  21.  thread2.Start(5000);  
  22.  thread3.Start(7000);  
  23.  
  24.  Thread joinThread = new Thread(joinAllThread);  
  25.  joinThread.Start(new Thread[] { thread1, thread2, thread3 });  
  26.  
  27. }  

在運(yùn)行上面的代碼后,將會(huì)得到和圖2同樣的運(yùn)行結(jié)果。上述兩種方法都沒(méi)有線程數(shù)的限制,當(dāng)然,仍然會(huì)受到操作系統(tǒng)和硬件資源的限制。

判斷線程運(yùn)行狀態(tài)的兩大方法就向你介紹到這里,希望對(duì)你了解和學(xué)習(xí)線程運(yùn)行狀態(tài)的判斷有所幫助。


分享文章:判斷線程運(yùn)行狀態(tài)的兩種方法
網(wǎng)站路徑:http://www.5511xx.com/article/cdgecee.html