程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#線程系列講座(2):Thread類的應用(6)

C#線程系列講座(2):Thread類的應用(6)

編輯:關於C語言

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

public ThreadCounter(int ms)
{
this.ms = ms;
increment();
}

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

圖2

使用Thread.join方法演示

private static void threadMethod(Object obj)
{
Thread.Sleep(Int32.Parse(obj.ToString()));
Console.WriteLine(obj + "毫秒任務結束");
}
private static void joinAllThread(object obj)
{
Thread[] threads = obj as Thread[];
foreach (Thread t in threads)
t.Join();
Console.WriteLine("所有的線程結束");
}
static void Main(string[] args)
{
Thread thread1 = new Thread(threadMethod);
Thread thread2 = new Thread(threadMethod);
Thread thread3 = new Thread(threadMethod);
thread1.Start(3000);
thread2.Start(5000);
thread3.Start(7000);
Thread joinThread = new Thread(joinAllThread);
joinThread.Start(new Thread[] { thread1, thread2, thread3 });

}

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved