Java Threads: Difference between revisions
Line 27: | Line 27: | ||
On a Linux system, each JVM thread counts as a "process", in that it is subject to system-wide and user-wide process number limitations - see "[[Linux_Process_Management_Concepts#Maximum_Number_of_Processes_Allowed_on_the_System|maximum number of processes allowed on a system]]" and "[[Linux_Process_Management_Concepts#Maximum_Number_of_Processes_Available_to_a_Single_User|maximum number of processes available to a single user]]". When a JVM instance adjust its number of threads, the change is reflected by <tt>/proc/stat</tt> "[[Linux_Process_Information#.2Fproc.2Fstat|processes]]" count. | On a Linux system, each JVM thread counts as a "process", in that it is subject to system-wide and user-wide process number limitations - see "[[Linux_Process_Management_Concepts#Maximum_Number_of_Processes_Allowed_on_the_System|maximum number of processes allowed on a system]]" and "[[Linux_Process_Management_Concepts#Maximum_Number_of_Processes_Available_to_a_Single_User|maximum number of processes available to a single user]]". When a JVM instance adjust its number of threads, the change is reflected by <tt>/proc/stat</tt> "[[Linux_Process_Information#.2Fproc.2Fstat|processes]]" count. | ||
The number of Java threads for a JVM is reported by [[Linux_Process_Information#Threads|/proc/<pid>/status]]. | |||
For an example of what happens when the number of Linux processes allowed to an user is reached, see {{Internal|Max_User_Processes_and_Java_OutOfMemoryError_%22unable_to_create_new_native_thread%22|OutOfMemoryError "unable to create new native thread"}} | For an example of what happens when the number of Linux processes allowed to an user is reached, see {{Internal|Max_User_Processes_and_Java_OutOfMemoryError_%22unable_to_create_new_native_thread%22|OutOfMemoryError "unable to create new native thread"}} |
Revision as of 04:51, 21 July 2017
Internal
Subjects
Concepts
Daemon Thread
A daemon thread is a thread that DOES NOT prevent the JVM from exiting, even if the thread is in WAITING or TIMED_WAITING state. Specifically the JVM will exit when only daemon threads remain.
When the JVM halts any remaining daemon threads are abandoned: finally blocks are not executed, stacks are not unwound - JVM just exits. Due to this reason daemon threads should be used sparingly and it is dangerous to use them for tasks that might perform any sort of I/O.
When a new thread is created it inherits the daemon status of its parent. Or it can be set with setDaemon(true).
For more details on the relationship between non-daemon threads and JVM shutdown, see:
Java Threads and Linux Processes
On a Linux system, each JVM thread counts as a "process", in that it is subject to system-wide and user-wide process number limitations - see "maximum number of processes allowed on a system" and "maximum number of processes available to a single user". When a JVM instance adjust its number of threads, the change is reflected by /proc/stat "processes" count.
The number of Java threads for a JVM is reported by /proc/<pid>/status.
For an example of what happens when the number of Linux processes allowed to an user is reached, see
A simple Java program that allows experimenting with threads: