>  기사  >  백엔드 개발  >  C# 스레드 조인

C# 스레드 조인

PHPz
PHPz원래의
2024-09-03 15:25:40790검색

C#에서 시스템 스레딩 네임스페이스 아래의 스레드 조인 클래스는 스레드 작업을 위한 여러 메서드로 구성됩니다. 그러한 메서드 중 하나가 Thread.Join()입니다. 이 메서드는 현재 스레드가 해당 작업을 종료하거나 완료할 때까지 모든 호출 스레드를 기다리게 하는 데 사용됩니다. 스레드의 Join() 메소드를 사용하여 동기화를 달성할 수 있으며 특정 스레드가 종료되었는지 확인하는 데에도 사용할 수 있습니다.

C#은 다음과 같은 세 가지 Join() 메서드 오버로드를 제공합니다.

  • 가입()
  • 가입(Int32)
  • 가입(시간 범위)

구문

세 가지 오버로드 모두에 대한 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#에서 Thread Join() 메서드는 어떻게 작동하나요?

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.
방법 매개변수 반품 공용 무효 Join() 인수를 사용하지 않습니다. void를 반환합니다. 공개 bool Join(int millisecondsTimeout) 스레드가 종료될 때까지 기다리는 데 필요한 밀리초 수를 나타내는 정수. 부울 값을 반환합니다. 스레드가 종료되면 true를 반환하고 매개변수에 지정된 시간이 경과하고 스레드가 종료되지 않으면 false를 반환합니다. 공개 bool Join(TimeSpan 시간 초과) 스레드가 종료될 때까지 기다리는 데 필요한 시간을 나타내는 TimeSpan 부울 값을 반환합니다. 스레드가 종료되면 true를 반환하고, 매개변수에 지정된 시간이 경과하고 스레드가 종료되지 않으면 false를 반환합니다.

Examples of C# Thread Join

Below are the examples of c# thread join:

Example #1

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:

C# 스레드 조인

Example #2

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:

C# 스레드 조인

Example #3

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:

C# 스레드 조인

Conclusion

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:C# 스레드다음 기사:C# 스레드