C# 3.0 线程连接方法
我写了一个例子来理解Join方法();C# 3.0 线程连接方法,c#-3.0,C# 3.0,我写了一个例子来理解Join方法(); 有人能解释它是如何工作的吗?sleep()和join()之间有什么区别呢?join会一直等到调用它的线程停止睡眠在给定的时间段内睡眠。 Thread.Sleep 在指定的毫秒数内阻止当前线程 -Thread.Join 阻止调用线程,直到线程终止(不知道持续多长时间) 请注意,Thread.Join()方法仅在Thread对象完成之前阻止调用线程(通常是应用程序的主执行线程)。您仍然可以让其他线程在后台执行,同时等待特定线程完成执行 它会导致当前运行的线程
有人能解释它是如何工作的吗?sleep()和join()之间有什么区别呢?
join
会一直等到调用它的线程停止<代码>睡眠在给定的时间段内睡眠。
在指定的毫秒数内阻止当前线程 -Thread.Sleep
阻止调用线程,直到线程终止(不知道持续多长时间)Thread.Join
它会导致当前运行的线程停止执行,直到它加入的线程停止执行。即joins方法等待线程死亡。@Ernest:根据msdn:thread join method()表示:阻止调用线程,直到线程终止。调用线程的意思是什么?调用线程的线程是如何知道线程已终止的?调用
Join
的线程就是“调用线程”。所有代码都在一个线程中执行,即使您没有显式创建任何代码Main
在运行库为此目的创建的线程中运行。至于调用线程如何知道另一个线程已退出:这是底层线程库的基本功能。我从未看过C#实现,但在许多线程库中,有一个信号量,线程在退出时会发出信号<代码>加入然后只需等待该信号量,直到收到通知。直到线程意味着什么?由主线程创建的线程。例如,如果从主线程启动线程。Join将使主线程等待已启动的线程完成其执行。在YOUR示例中,Main将等待aThread.Start(aData)完成
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");
}
}