Multithreading in Java
Java provides built-in support for multithreaded programming. A multithreaded program contains two or more part that can run concurrently. Each part of such a program is called a threaded a and each thread defines a separate path of execution. Thus, multithreading is a specialized form of multitasking.
Multithreading enables you to write very efficient programs that make maximum use of the CPU, because idle time can be kept to a minimum. this is especially important for the interactive, networked environment in which Java operates, because idle time is common.
➦A program can be divided into a number of small process. Each small process can be addressed as a single thread(a lightweight process). Multithreaded programs contain two or more threads that can run concurrently.
➦This means that a single program can perform two or more tasks simultaneously.For example, one thread is writing content on a file at the same time another thread is performing spelling check.
Advantages of Multithreading
- Reduces the computation time.
- Improves performance of an application.
- Threads distribute the same address space so it saves the memory.
- Context switching between threads is usually less costly than between processes.
- Cost of communication between threads is comparatively low.
➦Thread is a single sequential flow of control. A thread is a sequence of execution within a program. The Thread class defines several methods. The following table lists the various thread methods.
- Start: Starts a thread by calling its run method.
- Run Defines while the thread is running.
- Sleep Suspends thread to terminate.
- Join Waits for thread to terminate.
- isAlive Determines if a thread is still running.
- getName Returns the name of the thread.
- getPriority Returns the priority of the thread.
- Yield Current thread to yield control of the process to the threads.
Life Cycle of a Thread:
My thread is in running state Thread-Sleep Demo Complete
My thread is in running state Thread-Join Demo Complete
Thread[main,5,main] Thread State of MyThread1 before calling start: NEW Run by MyThread2 Thread State of MyThread1 in Main method before Sleep: RUNNABLE Run by Thread-1 Thread State of MyThread2 in Main method before Sleep: RUNNABLE Thread State of: MyThread2 - RUNNABLE Exit of Thread: MyThread2 Thread State of: Thread-1 - RUNNABLE Exit of Thread: Thread-1 Thread State of MyThread1 in Main method after Sleep: TERMINATED Thread State of MyThread2 in Main method after Sleep: TERMINATED