Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When does the main thread stop in Java?

I read this statement:

The main thread must be the last thread to finish execution. When the main thread stops, the program terminates.

Is it true?

I also came to know "Even if the main thread dies, the program keeps running".

This is my current understanding:

  • When you start a program, the JVM creates one thread to run your program.
  • The JVM creates one user thread for running a program. This thread is called main thread.
  • The main method of the class is called from the main thread.
  • If a program spawns new threads from the main thread, the program waits until the last thread dies.

Which one is true?

like image 871
Saravanan Avatar asked Sep 14 '11 12:09

Saravanan


People also ask

Can we stop main thread in Java?

You can not stop the main thread while any other thread are running. (All the child threads born out of main thread.) You can use function Thread. join() to keep the main thread waiting while other thread(s) execute.

Can main thread exit before child?

Yes. "this gets printed before the system. out. println() in the child threads.

What stops execution of a thread in Java?

Whenever we want to stop a thread from running state by calling stop() method of Thread class in Java. This method stops the execution of a running thread and removes it from the waiting threads pool and garbage collected. A thread will also move to the dead state automatically when it reaches the end of its method.

Why is it important for the main thread to terminate at the end?

There are certain properties associated with the main thread which are as follows: It is the thread from which other “child” threads will be spawned. Often, it must be the last thread to finish execution because it performs various shutdown actions.


1 Answers

The program terminates when all non-daemon threads die (a daemon thread is a thread marked with setDaemon(true); it's usually used for utility threads). From the documentation:

When a Java Virtual Machine starts up, there is usually a single non-daemon thread (which typically calls the method named main of some designated class). The Java Virtual Machine continues to execute threads until either of the following occurs:

  • The exit method of class Runtime has been called and the security manager has permitted the exit operation to take place.
  • All threads that are not daemon threads have died, either by returning from the call to the run method or by throwing an exception that propagates beyond the run method.
like image 161
axtavt Avatar answered Sep 21 '22 23:09

axtavt