2011-09-07 22 views
0
class Program 
    { 
     static void Main(string[] args) 
     { 
      ParameterizedThreadStart aStart = new ParameterizedThreadStart(Addition); 
      Thread aThread = new Thread(aStart); 
      Data aData = new Data(); 
      aData.X = 10; 
      aData.Y = 20; 

     aThread.Start(aData); 
     aThread.Join(); 
     Console.WriteLine("End of the program"); 
    } 


    static void Addition(object data) 
    { 
     var a = data as Data; 
     var b = a.X + a.Y; 
     a.result = b; 

     Console.WriteLine(a.result); 
     Thread.Sleep(1000); 
     Console.WriteLine("End of thread"); 

    } 
} 

我寫了一個例子來理解Join方法(); 任何人都可以解釋它是如何工作的?睡眠和加入之間有什麼區別()線程加入方法

回答

0

Join等到你調用它的線程停止。 Sleep在給定的時間內睡覺。

+0

@ Ernest:按照msdn:Thread join method()方法:阻塞調用線程,直到線程終止。調用線程是什麼意思,調用線程是如何知道線程被終止的? – Raghaav

+0

「調用線程」是調用「加入」的那個線程。即使您沒有明確創建任何代碼,所有代碼都會在線程中執行;爲此,'Main'運行在由運行時創建的線程中。至於調用線程如何知道另一個線程已經退出:這是底層線程庫的原始功能。我從來沒有看過C#實現,但在許多線程庫中,有一個線程在退出時會發出信號的信號量。 '加入'然後只需等信號燈,直到通知。 –

1
  • Thread.Sleep

    阻塞當前線程的毫秒指定的次數。

    - Thread.Join

    塊調用線程,直到某個線程終止(你不知道多久)

注意,的Thread.join()方法只阻塞調用線程( 通常是應用程序的主線程執行)直到線程對象完成。您仍然可以在等待特定線程完成執行的同時在後臺執行其他線程。

http://msdn.microsoft.com/en-us/library/system.threading.thread.join.aspx

+0

直到線程意味着什麼?由主線程創建的線程。 – Raghaav

+0

例如,如果你從主體開始你的線程。加入將使主線程等待你已經開始完成它的執行。例如,Main會等到aThread.Start(aData)完成 –

0

它會導致當前運行的線程停止執行,直到一次與停止execution.i.e加入連接方法等待線程終止線程。

+0

答案已經在上面進行了... – Bruce