Bhaskar
Bhaskar

Reputation: 1690

Re-instantiating a Thread

I have the following code, could anyone please clarify my doubt below.

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() {

}

It seems like in order to restart the thread I have to re-instantiate the thread again. Does this means I am creating a new thread? If I keep on creating 100 re-instiation will it create 100 threads and cause performance issue?

Upvotes: 1

Views: 212

Answers (4)

ilivewithian
ilivewithian

Reputation: 19702

Are you trying to wake the thread up before the 5 seconds in complete? In which case you could try using Monitor (Wait, Pulse etc)

Upvotes: 1

Bek Raupov
Bek Raupov

Reputation: 3777

first of all, you can't start the thread if it has already started. In your example, thread has finished it is work, that's why it is in terminated state.

you can check status using: Thread.ThreadState

Upvotes: 1

Jon Skeet
Jon Skeet

Reputation: 1500675

Yes, you either have to create a new thread or give the task to the thread pool each time to avoid a genuinely new thread being created. You can't restart a thread.

However, I'd suggest that if your task has failed to execute 100 times in a row, you have bigger problems than the performance overhead of starting new tasks.

Upvotes: 3

Michaël
Michaël

Reputation: 6734

You do not need to start the thread after sleep, the thread wake up automatically. It's the same thread.

Upvotes: 1

Related Questions