Multithreading in Java: Execute Multiple Threads Concurrently
Learn about multithreading in Java, a powerful feature enabling the concurrent execution of multiple threads. Discover how threads, as lightweight sub-processes, share memory space and help optimize memory usage and reduce context-switching time for efficient performance in Java applications.
Multithreading in Java
Multithreading in Java allows executing multiple threads simultaneously. A thread is a lightweight sub-process, sharing memory space. It saves memory and context-switching time.
Syntax
public class Main {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
Output
Hello World
Advantages of Multithreading
- Threads are independent; multiple operations can be performed simultaneously.
- It saves time as many operations can be done together.
- If an exception occurs in one thread, it doesn't affect others.
Multitasking
Multitasking allows executing multiple tasks simultaneously, utilizing the CPU.
Two types of multitasking:
- Process-based Multitasking (Multiprocessing)
- Each process has a separate memory area.
- Processes are heavyweight.
- High communication cost between processes.
- Thread-based Multitasking (Multithreading)
- Threads share the same memory area.
- Threads are lightweight.
- Low communication cost between threads.
Java Thread
A thread is a separate path of execution. Threads are independent and share memory.
Java Thread Class
The Thread class provides methods to create and manage threads.
Java Thread Methods
| Modifier and Type | Method | Description |
|---|---|---|
| void | start() | Starts the execution of the thread. |
| void | run() | Performs an action for a thread. |
| static void | sleep() | Pauses the thread for a specified time. |
| static Thread | currentThread() | Returns a reference to the currently executing thread. |
| void | join() | Waits for the thread to die. |
| int | getPriority() | Returns the thread's priority. |
| void | setPriority() | Changes the thread's priority. |
| String | getName() | Returns the thread's name. |
| void | setName() | Changes the thread's name. |
| long | getId() | Returns the thread's ID. |
| boolean | isAlive() | Tests if the thread is alive. |
| static void | yield() | Pauses the current thread to allow other threads to execute. |
| void | suspend() | Suspends the thread. |
| void | resume() | Resumes the suspended thread. |
| void | stop() | Stops the thread. |
| void | destroy() | Destroys the thread group and all its subgroups. |
| boolean | isDaemon() | Tests if the thread is a daemon thread. |
| void | setDaemon() | Marks the thread as a daemon or user thread. |
| void | interrupt() | Interrupts the thread. |
| boolean | isInterrupted() | Tests if the thread has been interrupted. |
| static boolean | interrupted() | Tests if the current thread has been interrupted. |
| static int | activeCount() | Returns the number of active threads in the current thread group. |
| void | checkAccess() | Checks if the current thread has permission to modify the thread. |
| static boolean | holdsLock(Object obj) | Returns true if the current thread holds the monitor lock on the specified object. |
| static void | dumpStack() | Prints a stack trace of the current thread to the standard error stream. |
| StackTraceElement[] | getStackTrace() | Returns an array of stack trace elements representing the thread's stack dump. |
| static int | enumerate(Thread[] tarray) | Copies active threads into the specified array. |
| Thread.State | getState() | Returns the thread's state. |
| ThreadGroup | getThreadGroup() | Returns the thread's group. |
| String | toString() | Returns a string representation of the thread. |
| void | notify() | Notifies one thread waiting for a specific object. |
| void | notifyAll() | Notifies all threads waiting for a specific object. |
| void | setContextClassLoader(ClassLoader cl) | Sets the context ClassLoader for the thread. |
| ClassLoader | getContextClassLoader() | Returns the context ClassLoader for the thread. |
| static Thread.UncaughtExceptionHandler | getDefaultUncaughtExceptionHandler() | Returns the default handler for uncaught exceptions. |
| static void | setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh) | Sets the default handler for uncaught exceptions. |