Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How does a JVM running multiple threads handle ctrl-c, w/ and w/o shutdown hooks?

Could not find this answer online. When Ctrl+C is hit:

  • When we don't have any shutdown hook, what happens to the running threads - do they each get hit with an InterruptedException?
  • When we have shutdown hook(s), I know that the shutdown hooks get run in new threads in arbitrary order. But what happens to the existing running threads? Do they still each get hit with an InterruptedException?

Thanks!

like image 311
jwayne Avatar asked Feb 25 '15 22:02

jwayne


People also ask

How many threads a JVM can handle?

Each JVM server can have a maximum of 256 threads to run Java applications. In a CICS region you can have a maximum of 1024 threads. If you have many JVM servers running in the CICS region, you cannot set the maximum value for every JVM server.

How does multithreading work in JVM?

To coordinate shared data access among multiple threads, the Java virtual machine associates a lock with each object and class. A lock is like a privilege that only one thread can "possess" at any one time. If a thread wants to lock a particular object or class, it asks the JVM.

What is JVM shutdown hook?

Shutdown hooks are called when the application terminates normally (when all threads finish, or when System. exit(0) is called).

Can two threads run at the same time in Java?

Multi-thread programming allows us to run threads concurrently, and each thread can handle different tasks.


2 Answers

The classic book "Java Concurrency in Practice" has a chapter (7.4) on the JVM shutdown, you should read that, but here are some relevant quotes:

If any application threads (daemon or nondaemon) are still running at shutdown time, they continue to run concurrently with the shutdown process.

The JVM makes no attempt to stop or interrupt any application threads that are still running at shutdown time; they are abruptly terminated when the JVM eventually halts.

So the threads are not interrupted, but you can interrupt them explicitly from the shutdown hook, if you wish.

like image 64
lbalazscs Avatar answered Oct 27 '22 11:10

lbalazscs


IMO, Daemon threads will continue to run during shutdown process and JVM will kill all running threads later when its time to exit the application. I don't think, running threads will get InterruptedException as JVM doesn't make any extra effort to stop running threads.

http://www.tutorialspoint.com/java/lang/runtime_addshutdownhook.htm

like image 44
devOpsTools Avatar answered Oct 27 '22 10:10

devOpsTools