C# 3.0 线程连接方法

C# 3.0 线程连接方法,c#-3.0,C# 3.0,我写了一个例子来理解Join方法(); 有人能解释它是如何工作的吗?sleep()和join()之间有什么区别呢?join会一直等到调用它的线程停止睡眠在给定的时间段内睡眠。 Thread.Sleep 在指定的毫秒数内阻止当前线程 -Thread.Join 阻止调用线程,直到线程终止(不知道持续多长时间) 请注意,Thread.Join()方法仅在Thread对象完成之前阻止调用线程(通常是应用程序的主执行线程)。您仍然可以让其他线程在后台执行,同时等待特定线程完成执行 它会导致当前运行的线程

我写了一个例子来理解Join方法();
有人能解释它是如何工作的吗?sleep()和join()之间有什么区别呢?

join
会一直等到调用它的线程停止<代码>睡眠在给定的时间段内睡眠。

  • Thread.Sleep

    在指定的毫秒数内阻止当前线程

    -
    Thread.Join

    阻止调用线程,直到线程终止(不知道持续多长时间)

请注意,Thread.Join()方法仅在Thread对象完成之前阻止调用线程(通常是应用程序的主执行线程)。您仍然可以让其他线程在后台执行,同时等待特定线程完成执行


它会导致当前运行的线程停止执行,直到它加入的线程停止执行。即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");

    }
}