熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> .NET編程 >> 正文

關於C#中Thread.Join()的一點理解

2013-11-13 09:54:30  來源: .NET編程 

  今天是第一次在C#中接觸Thread自己研究了一下其中ThreadJoin()這個方法下面談談自己的理解

  ThreadJoin()在MSDN中的解釋很模糊Blocks the calling thread until a thread terminates

  有兩個主要問題

  什麼是the calling thread?

  什麼是a thread?

  首先來看一下有關的概念 我們執行一個exe文件實際上就是開啟了一個進程同時開啟了至少一個線程

  但是真正干活的是線程就好比一個Team有好幾個人但是真正干活的是人不是Team

  具體到代碼來說以Console Application為例程序Testexe從Main函數開始運行實際上是有一個線程

  在執行Main函數我們稱作MainThread假如我們在Main函數中聲明了一個Thread稱作NewThread並且調用了

  NewThreadStart()的方法那麼 MainThread在處理Main函數裡面的代碼時遇到NewThreadStart()時就會去調用NewThread

  基於上面的討論我們可以得出結論在我們剛才的例子中the calling thread就是MainThread而a thread指的洽洽就是MainThread調用的NewThread線程

  現在回到MSDN的解釋我們可以這麼翻譯當NewThread調用Join方法的時候MainThread就被停止執行直到NewThread線程執行完畢這樣就好理解了吧O(∩_∩)O哈哈~

  好了前面分析完了現在來看測試用例吧

  Title

  using System;

  using SystemCollectionsGeneric;

  using SystemLinq;

  using SystemText;

  using SystemThreading;

  namespace Test

  {

  class TestThread

  {

  private static void ThreadFuncOne()

  {

  for (int i = ; i < ; i++)

  {

  ConsoleWriteLine(ThreadCurrentThreadName +   i =  + i)

  }

  ConsoleWriteLine(ThreadCurrentThreadName + has finished

  }

  static void Main(string[] args)

  {

  ThreadCurrentThreadName = MainThread;

  Thread newThread = new Thread(new ThreadStart(TestThreadThreadFuncOne))

  newThreadName = NewThread;

  for (int j = ; j < ; j++)

  {

  if (j ==

  {

  newThreadStart()

  newThreadJoin()

  }

  else

  {

  ConsoleWriteLine(ThreadCurrentThreadName +    j =  + j)

  }

  }

  ConsoleRead()

  }

  }

  }

  下面是測試的結果

  結論從測試中我們可以很清楚的看到MainThread在NewThreadJoin被調用後被阻塞直到NewThread

  執行完畢才繼續執行


From:http://tw.wingwit.com/Article/program/net/201311/11942.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.