C# 重新实例化线程

C# 重新实例化线程,c#,.net,multithreading,C#,.net,Multithreading,我有以下代码,请任何人澄清我的疑问如下 public static void Main() { Thread thread = new Thread(Display); thread.Start(); Thread.Sleep(5000); // Throws exception, thread is terminated, cannot be restarted. thread.Start() } public static void D

我有以下代码,请任何人澄清我的疑问如下

public static void Main() {
    Thread thread = new Thread(Display);
    thread.Start();
    Thread.Sleep(5000);     
    // Throws exception, thread is terminated, cannot be restarted. 
    thread.Start() 
}

public static void Display() {

}

似乎为了重新启动线程,我必须再次重新实例化线程。这是否意味着我正在创建一个新线程?如果我继续创建100个重新安装,它会创建100个线程并导致性能问题吗

无需在
睡眠后启动线程,线程将自动唤醒。是同一根线

无需在
睡眠后启动线程,线程将自动唤醒。是同一根线

是的,每次都必须创建一个新线程或将任务交给线程池,以避免创建真正的新线程。无法重新启动线程


但是,我建议,如果您的任务连续执行100次失败,您的问题将比启动新任务的性能开销更大。

是的,您必须创建一个新线程,或者每次都将任务交给线程池,以避免创建一个真正的新线程。无法重新启动线程


但是,我建议,如果您的任务连续执行100次失败,您的问题将比启动新任务的性能开销更大。

首先,如果线程已经启动,则无法启动线程。在您的示例中,线程已经完成了它的工作,这就是它处于终止状态的原因

您可以使用以下命令检查状态:
Thread.ThreadState

首先,如果线程已经启动,则无法启动它。在您的示例中,线程已经完成了它的工作,这就是它处于终止状态的原因

您可以使用以下命令检查状态:
Thread.ThreadState

您是否试图在5秒完成之前唤醒线程?在这种情况下,您可以尝试使用监视器(等待、脉冲等)

您是否试图在5秒完成之前唤醒线程?在这种情况下,您可以尝试使用监视器(等待、脉冲等)

您可能希望排队
显示
,以便它由线程池处理,而不是手动创建线程。您实际上在尝试做什么?通常,通过将线程保持在空闲状态、阻塞,然后在有更多工作时再次启动线程,可以避免线程创建开销。但实际上,你的实际问题是什么?线程和线程之间有区别。在上面的代码中,您将启动线程“thread”两次。您正在调用的Sleep方法不会调用您已经启动的线程,但是应用程序主线程感谢您的评论,我只是提供了一个示例。这不是实际的代码。只想知道它是否创建了一个新线程。您可能想将
Display
排入队列,这样它就可以由线程池处理,而不是手动创建线程。您实际上想做什么?通常,通过将线程保持在空闲状态、阻塞,然后在有更多工作时再次启动线程,可以避免线程创建开销。但实际上,你的实际问题是什么?线程和线程之间有区别。在上面的代码中,您将启动线程“thread”两次。您正在调用的Sleep方法不会调用您已经启动的线程,但是应用程序主线程感谢您的评论,我只是提供了一个示例。这不是实际的代码。只是想知道它是否创建了一个新线程。好的,谢谢John。如果我想多次执行相同的方法,我需要一次又一次地将其添加到线程池队列?@Bharskar:或者只是更改结构,以便在线程内循环,直到它工作为止。。。有一个方法可以多次显示来自同一个新线程的调用,而不是每次调用都显示一个新线程。好的,谢谢John。如果我想多次执行相同的方法,我需要一次又一次地将其添加到线程池队列?@Bharskar:或者只是更改结构,以便在线程内循环,直到它工作为止。。。有一个方法,它可以多次显示来自同一个新线程的调用,而不是每次调用都显示一个新线程。