C#에서 시스템 스레딩 네임스페이스 아래의 스레드 조인 클래스는 스레드 작업을 위한 여러 메서드로 구성됩니다. 그러한 메서드 중 하나가 Thread.Join()입니다. 이 메서드는 현재 스레드가 해당 작업을 종료하거나 완료할 때까지 모든 호출 스레드를 기다리게 하는 데 사용됩니다. 스레드의 Join() 메소드를 사용하여 동기화를 달성할 수 있으며 특정 스레드가 종료되었는지 확인하는 데에도 사용할 수 있습니다.
C#은 다음과 같은 세 가지 Join() 메서드 오버로드를 제공합니다.
구문
세 가지 오버로드 모두에 대한 Join() 메서드의 구문은 다음과 같습니다.
public void Join();
위의 Join() 메서드는 표준 COM 및 SendMessage 펌핑을 수행하는 동안 현재 인스턴스가 나타내는 스레드가 실행을 완료하거나 종료될 때까지 인수를 사용하지 않고 호출 스레드를 차단합니다.
public bool Join(int millisecondsTimeout);
위의 Join() 메서드는 정수를 인수로 사용하고 현재 인스턴스가 나타내는 스레드가 실행을 완료하거나 종료할 때까지 또는 표준 수행 중에 정수 인수 'millisecondsTimeout'을 사용하여 지정된 시간(밀리초)이 경과할 때까지 호출 스레드를 차단합니다. COM 및 SendMessage 펌핑.
public bool Join(TimeSpan timeout);
이 Join() 메서드는 TimeSpan 유형의 인수를 사용하고 현재 인스턴스가 나타내는 스레드가 실행을 완료하거나 종료할 때까지 또는 표준 COM 및 SendMessage 펌핑을 수행하는 동안 'timeout' 인수를 사용하여 지정된 시간이 경과할 때까지 호출 스레드를 차단합니다. .
C#에서 스레드 작업을 하려면 먼저 시스템을 가져와야 합니다. 스레딩 네임스페이스 내부에 있는 클래스에 액세스할 수 있도록 코드에 스레딩 네임스페이스가 있습니다.
Threading 네임스페이스 아래의 Thread 클래스에는 이미 Join() 메서드를 호출한 스레드가 작업을 완료하고 종료할 때까지 호출 스레드를 차단하여 여러 스레드가 동기화된 방식으로 작동하도록 하는 데 사용되는 Join() 메서드가 포함되어 있습니다. Join() 메서드를 호출한 스레드가 종료되지 않으면 호출 스레드는 무기한 차단됩니다. 따라서 Join() 메소드는 특정 스레드가 종료되었는지 확인하는 데 도움이 됩니다.
Join() 메서드는 활성 상태의 스레드에서 작동하며 Thread.IsAlive 속성을 사용하여 이를 확인할 수 있습니다. 스레드가 시작되기 전에 Join() 메서드를 호출하면 Join() 메서드가 즉시 반환됩니다. 같은 방식으로 스레드가 이미 종료되었을 때 Join() 메서드를 호출하는 경우 Join() 메서드도 즉시 반환됩니다. 따라서 스레드가 실행 중이 아닌 경우 Join() 메서드는 즉시 반환됩니다.
현재 스레드를 나타내는 스레드 개체의 Join() 메서드를 호출하면 안 됩니다. 이렇게 하면 현재 스레드가 무한정 대기하므로 앱이 응답하지 않게 됩니다.
Join() 메서드의 세 가지 오버로드에 관한 중요한 세부 정보를 보여주는 아래 표를 확인하세요.
Method | Parameters | Returns |
public void Join() | It does not take any arguments. | Returns void. |
public bool Join(int millisecondsTimeout) | An integer representing the number of milliseconds required to wait for the thread to terminate. | Returns Boolean value; returns true if the thread has terminated and returns false if the time specified by the parameter has elapsed and the thread has not terminated. |
public bool Join(TimeSpan timeout) | A TimeSpan which indicates the amount of time required to wait for the thread to terminate. | Returns Boolean value; returns true if the thread has terminated and returns false if the time specified by the parameter has elapsed and the thread has not terminated. |
Below are the examples of c# thread join:
Example showing the use of Join() method on first thread and other two threads in the code wait until the first thread completes its execution.
Code:
using System; using System.Threading; namespace ConsoleApp4 { public class Program { public void Display() { for (int i = 1; i <= 5; i++) { Console.WriteLine(Thread.CurrentThread.Name+" : " + i); //suspending thread for specified time Thread.Sleep(200); } } } public class ThreadDemo { public static void Main() { Program obj = new Program(); Thread thread1 = new Thread(new ThreadStart(obj.Display)); thread1.Name = "Thread1"; Thread thread2 = new Thread(new ThreadStart(obj.Display)); thread2.Name = "Thread2"; Thread thread3 = new Thread(new ThreadStart(obj.Display)); thread3.Name = "Thread3"; //starting thread1 thread1.Start(); //calling Join() on thread1 thread1.Join(); //starting thread2 thread2.Start(); //starting thread3 thread3.Start(); Console.ReadLine(); } } }
Output:
Example calling Join() method on all threads.
Code:
using System; using System.Threading; namespace ConsoleApp4 { public class Program { public static void Main(string[] args) { Console.WriteLine("Main thread started"); Thread thread1 = new Thread(Method1); Thread thread2 = new Thread(Method2); Thread thread3 = new Thread(Method3); thread1.Start(); thread2.Start(); thread3.Start(); thread1.Join(); thread2.Join(); thread3.Join(); Console.WriteLine("Main thread ended"); Console.ReadLine(); } public static void Method1() { Console.WriteLine("Method1 - Thread1 starting execution"); Thread.Sleep(1000); Console.WriteLine("Method1 - Thread1 execution completed"); } public static void Method2() { Console.WriteLine("Method2 - Thread2 starting execution"); Thread.Sleep(2500); Console.WriteLine("Method2 - Thread2 execution completed"); } public static void Method3() { Console.WriteLine("Method3 - Thread3 starting execution"); Thread.Sleep(5000); Console.WriteLine("Method3 - Thread3 execution completed"); } } }
Output:
Example of Join(int millisecondsTimeout) method.
Code:
using System; using System.Threading; namespace ConsoleApp4 { public class Program { public static void Main(string[] args) { Console.WriteLine("Main thread started"); Thread thread1 = new Thread(Method1); Thread thread2 = new Thread(Method2); Thread thread3 = new Thread(Method3); thread1.Start(); thread2.Start(); thread3.Start(); if (thread3.Join(2000)) { Console.WriteLine("Execution of thread3 completed in 2 seconds."); } else { Console.WriteLine("Execution of thread3 not completed in 2 seconds."); } Console.WriteLine("Main thread ended"); Console.ReadLine(); } public static void Method1() { Console.WriteLine("Method1 - Thread1 execution started"); Thread.Sleep(1000); Console.WriteLine("Method1 - Thread1 execution completed"); } public static void Method2() { Console.WriteLine("Method2 - Thread2 execution started"); Thread.Sleep(2500); Console.WriteLine("Method2 - Thread2 execution completed"); } public static void Method3() { Console.WriteLine("Method3 - Thread3 execution started"); Thread.Sleep(5000); Console.WriteLine("Method3 - Thread3 execution completed"); } } }
Output:
Join() method in C# makes one thread wait till another thread completes its task and terminates. There are three overloads of the Join() method in C#. Join() method works on the thread which is in the alive state. It helps to achieve synchronization while working with multiple threads.
위 내용은 C# 스레드 조인의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!