成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

判斷線程運行狀態的兩種方法

開發 后端
判斷線程運行狀態的方法有很多,如可以采用類似于對象計數器的方法等等,那么這里向你介紹兩種判斷線程運行狀態的方法,希望對你有所幫助。

判斷線程運行狀態的方法有很多,如可以采用類似于對象計數器的方法,所謂對象計數器,就是一個對象被引用一次,這個計數器就加1,銷毀引用就減1,如果引用數為0,則垃圾搜集器就會對這些引用數為0的對象進行回收。

判斷線程運行狀態方法一:線程計數器

線程也可以采用計數器的方法,即為所有需要監視的線程設一個線程計數器,每開始一個線程,在線程的執行方法中為這個計數器加1,如果某個線程結束(在線程執行方法的最后為這個計數器減1),為這個計數器減1。然后再開始一個線程,按著一定的時間間隔來監視這個計數器,如是棕個計數器為0,說明所有的線程都結束了。當然,也可以不用這個監視線程,而在每一個工作線程的最后(在為計數器減1的代碼的后面)來監視這個計數器,也就是說,每一個工作線程在退出之前,還要負責檢測這個計數器。使用這種方法不要忘了同步這個計數器變量啊,否則會產生意想不到的后果。

判斷線程運行狀態方法二:使用Thread.join方法

join方法只有在線程結束時才繼續執行下面的語句。可以對每一個線程調用它的join方法,但要注意,這個調用要在另一個線程里,而不要在主線程,否則程序會被阻塞的。

個人感覺這種方法比較好。

線程計數器方法演示:

  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))  // 必須同步計數器  
  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()+"毫秒任務結束");  
  35. decrease();  
  36. if (getCount() == 0)  
  37. Console.WriteLine("所有任務結束");  
  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();  

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

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

運行上面的程序后,將顯示如下圖的結果。

程序運行效果 

使用Thread.join方法演示

  1. private static void threadMethod(Object obj)  
  2. {  
  3. Thread.Sleep(Int32.Parse(obj.ToString()));  
  4. Console.WriteLine(obj + "毫秒任務結束");  
  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("所有的線程結束");  
  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. }  

在運行上面的代碼后,將會得到和圖2同樣的運行結果。上述兩種方法都沒有線程數的限制,當然,仍然會受到操作系統和硬件資源的限制。

判斷線程運行狀態的兩大方法就向你介紹到這里,希望對你了解和學習線程運行狀態的判斷有所幫助。

【編輯推薦】

  1. C# byte數組常用擴展淺析
  2. 淺析C#byte數組轉化成圖像的實現
  3. C#線程概述及視圖解析
  4. C#線程操作常見的六大操作方法
  5. C#線程類的定義實例解析
責任編輯:仲衡 來源: 博客園
相關推薦

2010-08-04 17:41:52

掛載NFS

2009-06-29 18:22:54

Java多線程從線程返回數據

2009-09-25 14:04:09

Hibernate eHibernate h

2010-04-13 09:50:44

Oracle跟蹤

2010-11-24 14:36:25

修復mysql表

2011-03-30 17:04:24

MySQL添加用戶

2010-06-02 17:16:16

自動運行SVN

2010-01-15 13:30:37

VB.NET并發性

2010-09-13 13:05:03

sql server分

2010-11-10 13:22:41

SQL Server備

2010-11-09 13:09:58

SQL Server分

2010-02-06 14:35:36

ibmdwRUP迭代

2010-09-09 19:53:50

2009-08-05 13:34:18

C#日期相減

2009-06-18 11:09:42

2020-09-16 18:27:36

Linux方法IP地址

2010-11-12 11:44:37

SQL Server刪

2010-09-07 11:18:10

2019-09-15 17:35:28

Wireshark解密HTTPS

2010-07-26 15:42:34

Perl模塊
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久久久久久久久九 | 蜜臀网| 7777在线视频免费播放 | 一区二区三区四区在线视频 | 久久中文视频 | 日韩免费在线观看视频 | 一区二区三区av | 久久久久成人精品免费播放动漫 | www.婷婷| wwww.xxxx免费 | 日本韩国欧美在线观看 | 人人干视频在线 | 欧美日韩国产欧美 | 欧美专区日韩专区 | 亚洲精品456| 亚洲三区视频 | 成人影院一区二区三区 | 成人午夜电影在线观看 | 中文字幕国产第一页 | 亚洲视频1区 | 自拍偷拍第一页 | 久在线视频播放免费视频 | 国产精品一区二区视频 | 欧美jizzhd精品欧美巨大免费 | 免费能直接在线观看黄的视频 | 日本久久久久久 | 日本在线一二 | 91不卡| 中文字幕在线精品 | 精品久久香蕉国产线看观看亚洲 | 欧洲亚洲一区 | av免费看片 | 黄色成人免费在线观看 | 久久久综合久久 | 国产精品视频一二三区 | 一区二区三区四区在线视频 | 久久精品一区 | 久久久久综合 | 一本综合久久 | 久久精品亚洲欧美日韩精品中文字幕 | 99re免费|