SlideShare a Scribd company logo
Amity School of Engineering & Technology
Threads
Amity School of Engineering & Technology
Multithreading in Java
• Multithreading in java is a process of executing multiple threads
simultaneously.
• Thread is basically a lightweight sub-process, a smallest unit of
processing.
• Multiprocessing and multithreading, both are used to achieve
multitasking.
• But we use multithreading than multiprocessing because threads
share a common memory area. They don't allocate separate
memory area so saves memory, and context-switching between the
threads takes less time than process.
• Java Multithreading is mostly used in games, animation etc.
Amity School of Engineering & Technology
Advantages of Java Multithreading
1) It doesn't block the user because threads are
independent and you can perform multiple operations at
same time.
2) You can perform many operations together so it
saves time.
3) Threads are independent so it doesn't affect other
threads if exception occur in a single thread.
Amity School of Engineering & Technology
Multitasking
Multitasking is a process of executing multiple tasks
simultaneously. We use multitasking to utilize the CPU.
Multitasking can be achieved by two ways:
1.Process-based Multitasking(Multiprocessing)
2.Thread-based Multitasking(Multithreading)
Amity School of Engineering & Technology
1) Process-based Multitasking (Multiprocessing)
1. Each process have its own address in memory i.e. each process
allocates separate memory area.
2. Process is heavyweight.
3. Cost of communication between the process is high.
4. Switching from one process to another require some time for
saving and loading registers, memory maps, updating lists etc.
2) Thread-based Multitasking (Multithreading)
1. Threads share the same address space.
2. Thread is lightweight.
3. Cost of communication between the thread is low.
Amity School of Engineering & Technology
What is Thread in java
A thread is a lightweight sub process, a smallest unit of processing.
Threads are independent, if there occurs exception in one thread, it
doesn't affect other threads. It shares a common memory area.
As shown in the above figure, thread is executed inside the process. There is
context-switching between the threads. There can be multiple processes inside the
OS and one process can have multiple threads.
Amity School of Engineering & Technology
Per process items | Per thread items
---------------------------------|-----------------
Address space | Program counter
Global variables | Registers
Open files | Stack
Child processes | State
Pending alarms |
Signals and signal handlers |
Accounting information |
Amity School of Engineering & Technology
Life cycle of a Thread (Thread States)
A thread can be in one of the five states. According to sun, there is
only 4 states in thread life cycle in java new, runnable, non-
runnable and terminated. There is no running state.
But for better understanding the threads, we are explaining it in the 5
states.
The life cycle of the thread in java is controlled by JVM. The java
thread states are as follows:
1 New
2 Runnable
3 Running
4 Non-Runnable (Blocked)
5 Terminated
Amity School of Engineering & Technology
Amity School of Engineering & Technology
1) New
The thread is in new state if you create an instance of Thread class
but before the invocation of start() method.
2) Runnable
The thread is in runnable state after invocation of start() method, but
the thread scheduler has not selected it to be the running thread.
3) Running
The thread is in running state if the thread scheduler has selected it.
4) Non-Runnable (Blocked)
This is the state when the thread is still alive, but is currently not
eligible to run.
5) Terminated
A thread is in terminated or dead state when its run() method exits.
Amity School of Engineering & Technology
How to create thread
There are two ways to create a thread:
1 By extending Thread class
2 By implementing Runnable interface.
Amity School of Engineering & Technology
By extending thread class
• The class should extend Java Thread class.
• The class should override the run() method.
• The functionality that is expected by the Thread to be executed is
written in the run() method.
• void start(): Creates a new thread and makes it runnable.
• void run(): The new thread begins its life inside this method.
Amity School of Engineering & Technology
Java Thread Example by extending Thread class
public class MyThread extends Thread {
public void run(){
System.out.println("thread is running...");
}
public static void main(String[] args) {
MyThread obj = new MyThread();
obj.start();
}
Amity School of Engineering & Technology
By Implementing Runnable interface
• The class should implement the Runnable interface
• The class should implement the run() method in the Runnable
interface
• The functionality that is expected by the Thread to be executed is
put in the run() method
Amity School of Engineering & Technology
Example:
public class MyThread1 implements Runnable {
public void run(){
System.out.println("thread is running..");
}
public static void main(String[] args) {
Thread t = new Thread(new MyThread1());
t.start();
}
Amity School of Engineering & Technology
Extends Thread class vs Implements
Runnable Interface?
• Extending the Thread class will make your class unable to extend
other classes, because of the single inheritance feature in JAVA.
• However, this will give you a simpler code structure. If you
implement Runnable, you can gain better object-oriented design and
consistency and also avoid the single inheritance problems.
• If you just want to achieve basic functionality of a thread you can
simply implement Runnable interface and override run() method.
• But if you want to do something serious with thread object as it has
other methods like suspend(), resume(), ..etc which are not available
in Runnable interface then you may prefer to extend the Thread
class.
Amity School of Engineering & Technology
Ending Thread
A Thread ends due to the following reasons:
• The thread ends when it comes when the run() method
finishes its execution.
• When the thread throws an Exception or Error that is not
being caught in the program.
• Java program completes or ends.
• Another thread calls stop() methods.
Amity School of Engineering & Technology
Synchronization of Threads
• In many cases concurrently running threads share data and
two threads try to do operations on the same variables at the
same time. This often results in corrupt data as two threads
try to operate on the same data.
• A popular solution is to provide some kind of lock
primitive. Only one thread can acquire a particular lock at any
particular time. This can be achieved by using a keyword
“synchronized” .
• By using the synchronize only one thread can access the
method at a time and a second call will be blocked until the
first call returns or wait() is called inside the synchronized
method.
Amity School of Engineering & Technology
Thread Scheduler in Java
Thread scheduler in java is the part of the JVM that
decides which thread should run.
There is no guarantee that which runnable thread will be
chosen to run by the thread scheduler.
Only one thread at a time can run in a single process.
The thread scheduler mainly uses preemptive or time
slicing scheduling to schedule the threads.
Amity School of Engineering & Technology
Difference between preemptive scheduling and time slicing
Under preemptive scheduling, the highest priority task
executes until it enters the waiting or dead states or a
higher priority task comes into existence.
Under time slicing, a task executes for a predefined slice
of time and then reenters the pool of ready tasks. The
scheduler then determines which task should execute
next, based on priority and other factors.
Amity School of Engineering & Technology
Sleep method in java
• The sleep() method of Thread class is used to sleep a
thread for the specified amount of time.
Syntax of sleep() method in java
• The Thread class provides methods for sleeping a thread:
public static void sleep(long miliseconds) throws InterruptedException
Amity School of Engineering & Technology
Example of sleep method in java
class TestSleepMethod1 extends Thread{
public void run(){
for(int i=1;i<5;i++){
try { Thread.sleep(500); } catch(InterruptedException e)
{System.out.println(e); }
System.out.println(i);
}
}
public static void main(String args[]){
TestSleepMethod1 t1=new TestSleepMethod1();
TestSleepMethod1 t2=new TestSleepMethod1();
t1.start();
t2.start();
}
}
Amity School of Engineering & Technology
Can we start a thread twice
public class TestThreadTwice1 extends Thread{
public void run(){
System.out.println("running...");
}
public static void main(String args[]){
TestThreadTwice1 t1=new TestThreadTwice1();
t1.start();
t1.start();
}
}
Amity School of Engineering & Technology
What if we call run() method directly instead start() method?
class TestCallRun1 extends Thread{
public void run(){
System.out.println("running...");
}
public static void main(String args[]){
TestCallRun1 t1=new TestCallRun1();
t1.run();//fine, but does not start a separate call stack
}
}
Amity School of Engineering & Technology
class TestCallRun2 extends Thread{
public void run(){
for(int i=1;i<5;i++){
try{Thread.sleep(500);}catch(InterruptedException e){System.out.println(e);}
System.out.println(i);
}
}
public static void main(String args[]){
TestCallRun2 t1=new TestCallRun2();
TestCallRun2 t2=new TestCallRun2();
t1.run();
t2.run();
}
}
Problem if you direct call run() method
Amity School of Engineering & Technology
The join() method
• The join() method waits for a thread to die. In other words, it causes
the currently running threads to stop executing until the thread it
joins with completes its task.
Syntax:
• public void join() throws InterruptedException
• public void join(long milliseconds) throws InterruptedException
Amity School of Engineering & Technology
Example of join() method
class TestJoinMethod1 extends Thread{
public void run(){
for(int i=1;i<=5;i++){
try{
Thread.sleep(500);
}catch(Exception e){System.out.println(e);}
System.out.println(i);
}
}
public static void main(String args[]){
TestJoinMethod1 t1=new TestJoinMethod1();
TestJoinMethod1 t2=new TestJoinMethod1();
TestJoinMethod1 t3=new TestJoinMethod1();
t1.start();
try{
t1.join();
}catch(Exception e){System.out.println(e);}
t2.start();
t3.start();
}
}
Amity School of Engineering & Technology
Example of join(long miliseconds) method
class TestJoinMethod2 extends Thread{
public void run(){
for(int i=1;i<=5;i++){
try{
Thread.sleep(500);
}catch(Exception e){System.out.println(e);}
System.out.println(i);
}
}
public static void main(String args[]){
TestJoinMethod2 t1=new TestJoinMethod2();
TestJoinMethod2 t2=new TestJoinMethod2();
TestJoinMethod2 t3=new TestJoinMethod2();
t1.start();
try{
t1.join(1500);
}catch(Exception e){System.out.println(e);}
t2.start();
t3.start();
}
}
Amity School of Engineering & Technology
getName(),setName(String) and getId() method:
class TestJoinMethod3 extends Thread{
public void run(){
System.out.println("running...");
}
public static void main(String args[]){
TestJoinMethod3 t1=new TestJoinMethod3();
TestJoinMethod3 t2=new TestJoinMethod3();
System.out.println("Name of t1:"+t1.getName());
System.out.println("Name of t2:"+t2.getName());
System.out.println("id of t1:"+t1.getId());
t1.start();
t2.start();
t1.setName("Sonoo Jaiswal");
System.out.println("After changing name of t1:"+t1.getName());
} }
public String getName()
public void setName(String name)
public long getId()
Amity School of Engineering & Technology
The currentThread() method:
The currentThread() method returns a reference to the currently executing thread object.
Syntax:
public static Thread currentThread()
class TestJoinMethod4 extends Thread{
public void run(){
System.out.println(Thread.currentThread().getName());
}
}
public static void main(String args[]){
TestJoinMethod4 t1=new TestJoinMethod4();
TestJoinMethod4 t2=new TestJoinMethod4();
t1.start();
t2.start();
}
}
Amity School of Engineering & Technology
Naming Thread and Current Thread
Naming Thread
• The Thread class provides methods to change and get the name of a
thread. By default, each thread has a name i.e. thread-0, thread-1 and so
on. We can change the name of the thread by using setName() method.
The syntax of setName() and getName() methods are given below:
• public String getName(): is used to return the name of a thread.
• public void setName(String name): is used to change the name of a
thread.
Amity School of Engineering & Technology
class TestMultiNaming1 extends Thread{
public void run(){
System.out.println("running...");
}
public static void main(String args[]){
TestMultiNaming1 t1=new TestMultiNaming1();
TestMultiNaming1 t2=new TestMultiNaming1();
System.out.println("Name of t1:"+t1.getName());
System.out.println("Name of t2:"+t2.getName());
t1.start();
t2.start();
t1.setName("Sonoo Jaiswal");
System.out.println("After changing name of t1:"+t1.getName());
}
}
Amity School of Engineering & Technology
State of thread
import java.lang.*;
public class Threadstate implements Runnable {
public void run() { // returns the state of this thread
Thread.State state = Thread.currentThread().getState();
System.out.println(Thread.currentThread().getName());
System.out.println("state = " + state);
}
public static void main(String args[]) {
Thread t = new Thread(new Threadstate()); // this will call run()
function t.start();
}
}
Amity School of Engineering & Technology
Priority of a Thread (Thread Priority):
• Each thread have a priority. Priorities are represented by a number
between 1 and 10. In most cases, thread schedular schedules the
threads according to their priority (known as preemptive scheduling).
But it is not guaranteed because it depends on JVM specification
that which scheduling it chooses.
3 constants defiend in Thread class:
• public static int MIN_PRIORITY
• public static int NORM_PRIORITY
• public static int MAX_PRIORITY
Default priority of a thread is 5 (NORM_PRIORITY). The value of
MIN_PRIORITY is 1 and the value of MAX_PRIORITY is 10.
Amity School of Engineering & Technology
class TestMultiPriority1 extends Thread{
public void run(){
System.out.println("running thread name is:"+Thread.currentThread().getName());
System.out.println("running thread priority is:"+Thread.currentThread().getPriority());
}
public static void main(String args[]){
TestMultiPriority1 m1=new TestMultiPriority1();
TestMultiPriority1 m2=new TestMultiPriority1();
m1.setPriority(Thread.MIN_PRIORITY);
m2.setPriority(Thread.MAX_PRIORITY);
m1.start();
m2.start();
}
}
Amity School of Engineering & Technology
Daemon Thread in Java
Daemon thread in java is a service provider thread that provides services
to the user thread. Its life depend on the mercy of user threads i.e. when all
the user threads dies, JVM terminates this thread automatically.
There are many java daemon threads running automatically e.g. gc, finalizer
etc.
You can see all the detail by typing the jconsole in the command prompt.
The jconsole tool provides information about the loaded classes, memory
usage, running threads etc.
Points to remember for Daemon Thread in Java
• It provides services to user threads for background supporting tasks. It has
no role in life than to serve user threads.
• Its life depends on user threads.
• It is a low priority thread.
Amity School of Engineering & Technology
Methods for Java Daemon thread by Thread class
The java.lang.Thread class provides two methods for java daemon thread.
1) public void setDaemon(boolean status)
is used to mark the current thread as daemon thread or user thread.
2) public boolean isDaemon()
is used to check that current is daemon.
Amity School of Engineering & Technology
public class TestDaemonThread1 extends Thread{
public void run(){
if(Thread.currentThread().isDaemon()){//checking for daemon thread
System.out.println("daemon thread work");
}
else{
System.out.println("user thread work");
}
}
public static void main(String[] args){
TestDaemonThread1 t1=new TestDaemonThread1();//creating thread
TestDaemonThread1 t2=new TestDaemonThread1();
TestDaemonThread1 t3=new TestDaemonThread1();
t1.setDaemon(true);//now t1 is daemon thread
t1.start();//starting threads
t2.start();
t3.start();
}
}
Amity School of Engineering & Technology
If we make a user thread as Daemon, it must not be started
otherwise it will throw IllegalThreadStateException.
class TestDaemonThread2 extends Thread{
public void run(){
System.out.println("Name: "+Thread.currentThread().getName());
System.out.println("Daemon: "+Thread.currentThread().isDaemon());
}
public static void main(String[] args){
TestDaemonThread2 t1=new TestDaemonThread2();
TestDaemonThread2 t2=new TestDaemonThread2();
t1.start();
t1.setDaemon(true);//will throw exception here
t2.start();
}
}
Amity School of Engineering & Technology
Controling the main thread
class CurrentThreadDemo {
public static void main(String args[]) {
Thread t = Thread.currentThread();
System.out.println("Current thread: " + t);
// change the name of the thread
t.setName("My Thread");
System.out.println("After name change: " + t);
try {
for(int n = 5; n > 0; n--)
{
System.out.println(n);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
System.out.println("Main thread interrupted");
}
}
}
Amity School of Engineering & Technology
Thanks

More Related Content

What's hot

Multithreading In Java
Multithreading In JavaMultithreading In Java
Multithreading In Java
parag
 

What's hot (20)

Multithreading In Java
Multithreading In JavaMultithreading In Java
Multithreading In Java
 
servlet in java
servlet in javaservlet in java
servlet in java
 
Java threading
Java threadingJava threading
Java threading
 
java-thread
java-threadjava-thread
java-thread
 
Exception handling in java
Exception handling in javaException handling in java
Exception handling in java
 
Exception Handling in VB.Net
Exception Handling in VB.NetException Handling in VB.Net
Exception Handling in VB.Net
 
Exception handling
Exception handlingException handling
Exception handling
 
Finalize() method
Finalize() methodFinalize() method
Finalize() method
 
Core java
Core javaCore java
Core java
 
Exception handling in java
Exception handling  in javaException handling  in java
Exception handling in java
 
Advance Java Programming(CM5I) Event handling
Advance Java Programming(CM5I) Event handlingAdvance Java Programming(CM5I) Event handling
Advance Java Programming(CM5I) Event handling
 
Multithreading in java
Multithreading in javaMultithreading in java
Multithreading in java
 
JavaFX Overview
JavaFX OverviewJavaFX Overview
JavaFX Overview
 
Java features
Java featuresJava features
Java features
 
Java abstract class & abstract methods
Java abstract class & abstract methodsJava abstract class & abstract methods
Java abstract class & abstract methods
 
Interface
InterfaceInterface
Interface
 
JDBC: java DataBase connectivity
JDBC: java DataBase connectivityJDBC: java DataBase connectivity
JDBC: java DataBase connectivity
 
Jdbc ppt
Jdbc pptJdbc ppt
Jdbc ppt
 
Advance Java Topics (J2EE)
Advance Java Topics (J2EE)Advance Java Topics (J2EE)
Advance Java Topics (J2EE)
 
Java Exception Handling and Applets
Java Exception Handling and AppletsJava Exception Handling and Applets
Java Exception Handling and Applets
 

Similar to 1.17 Thread in java.pptx

OOPS object oriented programming UNIT-4.pptx
OOPS object oriented programming UNIT-4.pptxOOPS object oriented programming UNIT-4.pptx
OOPS object oriented programming UNIT-4.pptx
Arulmozhivarman8
 
07. Parbdhdjdjdjsjsjdjjdjdjjkdkkdkdkt.pptx
07. Parbdhdjdjdjsjsjdjjdjdjjkdkkdkdkt.pptx07. Parbdhdjdjdjsjsjdjjdjdjjkdkkdkdkt.pptx
07. Parbdhdjdjdjsjsjdjjdjdjjkdkkdkdkt.pptx
nimbalkarvikram966
 
Multithreading in Java Object Oriented Programming language
Multithreading in Java Object Oriented Programming languageMultithreading in Java Object Oriented Programming language
Multithreading in Java Object Oriented Programming language
arnavytstudio2814
 
Threads in java, Multitasking and Multithreading
Threads in java, Multitasking and MultithreadingThreads in java, Multitasking and Multithreading
Threads in java, Multitasking and Multithreading
ssusere538f7
 

Similar to 1.17 Thread in java.pptx (20)

U4 JAVA.pptx
U4 JAVA.pptxU4 JAVA.pptx
U4 JAVA.pptx
 
Threads in Java
Threads in JavaThreads in Java
Threads in Java
 
Multithreading in Java
Multithreading in JavaMultithreading in Java
Multithreading in Java
 
OOPS object oriented programming UNIT-4.pptx
OOPS object oriented programming UNIT-4.pptxOOPS object oriented programming UNIT-4.pptx
OOPS object oriented programming UNIT-4.pptx
 
Multi threading
Multi threadingMulti threading
Multi threading
 
MULTI THREADING IN JAVA
MULTI THREADING IN JAVAMULTI THREADING IN JAVA
MULTI THREADING IN JAVA
 
BCA MultiThreading.ppt
BCA MultiThreading.pptBCA MultiThreading.ppt
BCA MultiThreading.ppt
 
07. Parbdhdjdjdjsjsjdjjdjdjjkdkkdkdkt.pptx
07. Parbdhdjdjdjsjsjdjjdjdjjkdkkdkdkt.pptx07. Parbdhdjdjdjsjsjdjjdjdjjkdkkdkdkt.pptx
07. Parbdhdjdjdjsjsjdjjdjdjjkdkkdkdkt.pptx
 
Slide 7 Thread-1.pptx
Slide 7 Thread-1.pptxSlide 7 Thread-1.pptx
Slide 7 Thread-1.pptx
 
Multithreading in java
Multithreading in javaMultithreading in java
Multithreading in java
 
Multithreading in java
Multithreading in javaMultithreading in java
Multithreading in java
 
Multithreading Introduction and Lifecyle of thread
Multithreading Introduction and Lifecyle of threadMultithreading Introduction and Lifecyle of thread
Multithreading Introduction and Lifecyle of thread
 
Multithreading in Java Object Oriented Programming language
Multithreading in Java Object Oriented Programming languageMultithreading in Java Object Oriented Programming language
Multithreading in Java Object Oriented Programming language
 
Chap2 2 1
Chap2 2 1Chap2 2 1
Chap2 2 1
 
Threads in java, Multitasking and Multithreading
Threads in java, Multitasking and MultithreadingThreads in java, Multitasking and Multithreading
Threads in java, Multitasking and Multithreading
 
Java unit 12
Java unit 12Java unit 12
Java unit 12
 
Multithreading in java
Multithreading in javaMultithreading in java
Multithreading in java
 
Unit No 4 Exception Handling and Multithreading.pptx
Unit No 4 Exception Handling and Multithreading.pptxUnit No 4 Exception Handling and Multithreading.pptx
Unit No 4 Exception Handling and Multithreading.pptx
 
Multithreading programming in java
Multithreading programming in javaMultithreading programming in java
Multithreading programming in java
 
Java threads
Java threadsJava threads
Java threads
 

Recently uploaded

Automobile Management System Project Report.pdf
Automobile Management System Project Report.pdfAutomobile Management System Project Report.pdf
Automobile Management System Project Report.pdf
Kamal Acharya
 
RS Khurmi Machine Design Clutch and Brake Exercise Numerical Solutions
RS Khurmi Machine Design Clutch and Brake Exercise Numerical SolutionsRS Khurmi Machine Design Clutch and Brake Exercise Numerical Solutions
RS Khurmi Machine Design Clutch and Brake Exercise Numerical Solutions
Atif Razi
 

Recently uploaded (20)

Danfoss NeoCharge Technology -A Revolution in 2024.pdf
Danfoss NeoCharge Technology -A Revolution in 2024.pdfDanfoss NeoCharge Technology -A Revolution in 2024.pdf
Danfoss NeoCharge Technology -A Revolution in 2024.pdf
 
A case study of cinema management system project report..pdf
A case study of cinema management system project report..pdfA case study of cinema management system project report..pdf
A case study of cinema management system project report..pdf
 
A CASE STUDY ON ONLINE TICKET BOOKING SYSTEM PROJECT.pdf
A CASE STUDY ON ONLINE TICKET BOOKING SYSTEM PROJECT.pdfA CASE STUDY ON ONLINE TICKET BOOKING SYSTEM PROJECT.pdf
A CASE STUDY ON ONLINE TICKET BOOKING SYSTEM PROJECT.pdf
 
Automobile Management System Project Report.pdf
Automobile Management System Project Report.pdfAutomobile Management System Project Report.pdf
Automobile Management System Project Report.pdf
 
2024 DevOps Pro Europe - Growing at the edge
2024 DevOps Pro Europe - Growing at the edge2024 DevOps Pro Europe - Growing at the edge
2024 DevOps Pro Europe - Growing at the edge
 
Final project report on grocery store management system..pdf
Final project report on grocery store management system..pdfFinal project report on grocery store management system..pdf
Final project report on grocery store management system..pdf
 
Explosives Industry manufacturing process.pdf
Explosives Industry manufacturing process.pdfExplosives Industry manufacturing process.pdf
Explosives Industry manufacturing process.pdf
 
Quality defects in TMT Bars, Possible causes and Potential Solutions.
Quality defects in TMT Bars, Possible causes and Potential Solutions.Quality defects in TMT Bars, Possible causes and Potential Solutions.
Quality defects in TMT Bars, Possible causes and Potential Solutions.
 
Online resume builder management system project report.pdf
Online resume builder management system project report.pdfOnline resume builder management system project report.pdf
Online resume builder management system project report.pdf
 
Event Management System Vb Net Project Report.pdf
Event Management System Vb Net  Project Report.pdfEvent Management System Vb Net  Project Report.pdf
Event Management System Vb Net Project Report.pdf
 
ENERGY STORAGE DEVICES INTRODUCTION UNIT-I
ENERGY STORAGE DEVICES  INTRODUCTION UNIT-IENERGY STORAGE DEVICES  INTRODUCTION UNIT-I
ENERGY STORAGE DEVICES INTRODUCTION UNIT-I
 
Sachpazis:Terzaghi Bearing Capacity Estimation in simple terms with Calculati...
Sachpazis:Terzaghi Bearing Capacity Estimation in simple terms with Calculati...Sachpazis:Terzaghi Bearing Capacity Estimation in simple terms with Calculati...
Sachpazis:Terzaghi Bearing Capacity Estimation in simple terms with Calculati...
 
Democratizing Fuzzing at Scale by Abhishek Arya
Democratizing Fuzzing at Scale by Abhishek AryaDemocratizing Fuzzing at Scale by Abhishek Arya
Democratizing Fuzzing at Scale by Abhishek Arya
 
fluid mechanics gate notes . gate all pyqs answer
fluid mechanics gate notes . gate all pyqs answerfluid mechanics gate notes . gate all pyqs answer
fluid mechanics gate notes . gate all pyqs answer
 
RS Khurmi Machine Design Clutch and Brake Exercise Numerical Solutions
RS Khurmi Machine Design Clutch and Brake Exercise Numerical SolutionsRS Khurmi Machine Design Clutch and Brake Exercise Numerical Solutions
RS Khurmi Machine Design Clutch and Brake Exercise Numerical Solutions
 
The Ultimate Guide to External Floating Roofs for Oil Storage Tanks.docx
The Ultimate Guide to External Floating Roofs for Oil Storage Tanks.docxThe Ultimate Guide to External Floating Roofs for Oil Storage Tanks.docx
The Ultimate Guide to External Floating Roofs for Oil Storage Tanks.docx
 
Construction method of steel structure space frame .pptx
Construction method of steel structure space frame .pptxConstruction method of steel structure space frame .pptx
Construction method of steel structure space frame .pptx
 
Toll tax management system project report..pdf
Toll tax management system project report..pdfToll tax management system project report..pdf
Toll tax management system project report..pdf
 
shape functions of 1D and 2 D rectangular elements.pptx
shape functions of 1D and 2 D rectangular elements.pptxshape functions of 1D and 2 D rectangular elements.pptx
shape functions of 1D and 2 D rectangular elements.pptx
 
CME397 Surface Engineering- Professional Elective
CME397 Surface Engineering- Professional ElectiveCME397 Surface Engineering- Professional Elective
CME397 Surface Engineering- Professional Elective
 

1.17 Thread in java.pptx

  • 1. Amity School of Engineering & Technology Threads
  • 2. Amity School of Engineering & Technology Multithreading in Java • Multithreading in java is a process of executing multiple threads simultaneously. • Thread is basically a lightweight sub-process, a smallest unit of processing. • Multiprocessing and multithreading, both are used to achieve multitasking. • But we use multithreading than multiprocessing because threads share a common memory area. They don't allocate separate memory area so saves memory, and context-switching between the threads takes less time than process. • Java Multithreading is mostly used in games, animation etc.
  • 3. Amity School of Engineering & Technology Advantages of Java Multithreading 1) It doesn't block the user because threads are independent and you can perform multiple operations at same time. 2) You can perform many operations together so it saves time. 3) Threads are independent so it doesn't affect other threads if exception occur in a single thread.
  • 4. Amity School of Engineering & Technology Multitasking Multitasking is a process of executing multiple tasks simultaneously. We use multitasking to utilize the CPU. Multitasking can be achieved by two ways: 1.Process-based Multitasking(Multiprocessing) 2.Thread-based Multitasking(Multithreading)
  • 5. Amity School of Engineering & Technology 1) Process-based Multitasking (Multiprocessing) 1. Each process have its own address in memory i.e. each process allocates separate memory area. 2. Process is heavyweight. 3. Cost of communication between the process is high. 4. Switching from one process to another require some time for saving and loading registers, memory maps, updating lists etc. 2) Thread-based Multitasking (Multithreading) 1. Threads share the same address space. 2. Thread is lightweight. 3. Cost of communication between the thread is low.
  • 6. Amity School of Engineering & Technology What is Thread in java A thread is a lightweight sub process, a smallest unit of processing. Threads are independent, if there occurs exception in one thread, it doesn't affect other threads. It shares a common memory area. As shown in the above figure, thread is executed inside the process. There is context-switching between the threads. There can be multiple processes inside the OS and one process can have multiple threads.
  • 7. Amity School of Engineering & Technology Per process items | Per thread items ---------------------------------|----------------- Address space | Program counter Global variables | Registers Open files | Stack Child processes | State Pending alarms | Signals and signal handlers | Accounting information |
  • 8. Amity School of Engineering & Technology Life cycle of a Thread (Thread States) A thread can be in one of the five states. According to sun, there is only 4 states in thread life cycle in java new, runnable, non- runnable and terminated. There is no running state. But for better understanding the threads, we are explaining it in the 5 states. The life cycle of the thread in java is controlled by JVM. The java thread states are as follows: 1 New 2 Runnable 3 Running 4 Non-Runnable (Blocked) 5 Terminated
  • 9. Amity School of Engineering & Technology
  • 10. Amity School of Engineering & Technology 1) New The thread is in new state if you create an instance of Thread class but before the invocation of start() method. 2) Runnable The thread is in runnable state after invocation of start() method, but the thread scheduler has not selected it to be the running thread. 3) Running The thread is in running state if the thread scheduler has selected it. 4) Non-Runnable (Blocked) This is the state when the thread is still alive, but is currently not eligible to run. 5) Terminated A thread is in terminated or dead state when its run() method exits.
  • 11. Amity School of Engineering & Technology How to create thread There are two ways to create a thread: 1 By extending Thread class 2 By implementing Runnable interface.
  • 12. Amity School of Engineering & Technology By extending thread class • The class should extend Java Thread class. • The class should override the run() method. • The functionality that is expected by the Thread to be executed is written in the run() method. • void start(): Creates a new thread and makes it runnable. • void run(): The new thread begins its life inside this method.
  • 13. Amity School of Engineering & Technology Java Thread Example by extending Thread class public class MyThread extends Thread { public void run(){ System.out.println("thread is running..."); } public static void main(String[] args) { MyThread obj = new MyThread(); obj.start(); }
  • 14. Amity School of Engineering & Technology By Implementing Runnable interface • The class should implement the Runnable interface • The class should implement the run() method in the Runnable interface • The functionality that is expected by the Thread to be executed is put in the run() method
  • 15. Amity School of Engineering & Technology Example: public class MyThread1 implements Runnable { public void run(){ System.out.println("thread is running.."); } public static void main(String[] args) { Thread t = new Thread(new MyThread1()); t.start(); }
  • 16. Amity School of Engineering & Technology Extends Thread class vs Implements Runnable Interface? • Extending the Thread class will make your class unable to extend other classes, because of the single inheritance feature in JAVA. • However, this will give you a simpler code structure. If you implement Runnable, you can gain better object-oriented design and consistency and also avoid the single inheritance problems. • If you just want to achieve basic functionality of a thread you can simply implement Runnable interface and override run() method. • But if you want to do something serious with thread object as it has other methods like suspend(), resume(), ..etc which are not available in Runnable interface then you may prefer to extend the Thread class.
  • 17. Amity School of Engineering & Technology Ending Thread A Thread ends due to the following reasons: • The thread ends when it comes when the run() method finishes its execution. • When the thread throws an Exception or Error that is not being caught in the program. • Java program completes or ends. • Another thread calls stop() methods.
  • 18. Amity School of Engineering & Technology Synchronization of Threads • In many cases concurrently running threads share data and two threads try to do operations on the same variables at the same time. This often results in corrupt data as two threads try to operate on the same data. • A popular solution is to provide some kind of lock primitive. Only one thread can acquire a particular lock at any particular time. This can be achieved by using a keyword “synchronized” . • By using the synchronize only one thread can access the method at a time and a second call will be blocked until the first call returns or wait() is called inside the synchronized method.
  • 19. Amity School of Engineering & Technology Thread Scheduler in Java Thread scheduler in java is the part of the JVM that decides which thread should run. There is no guarantee that which runnable thread will be chosen to run by the thread scheduler. Only one thread at a time can run in a single process. The thread scheduler mainly uses preemptive or time slicing scheduling to schedule the threads.
  • 20. Amity School of Engineering & Technology Difference between preemptive scheduling and time slicing Under preemptive scheduling, the highest priority task executes until it enters the waiting or dead states or a higher priority task comes into existence. Under time slicing, a task executes for a predefined slice of time and then reenters the pool of ready tasks. The scheduler then determines which task should execute next, based on priority and other factors.
  • 21. Amity School of Engineering & Technology Sleep method in java • The sleep() method of Thread class is used to sleep a thread for the specified amount of time. Syntax of sleep() method in java • The Thread class provides methods for sleeping a thread: public static void sleep(long miliseconds) throws InterruptedException
  • 22. Amity School of Engineering & Technology Example of sleep method in java class TestSleepMethod1 extends Thread{ public void run(){ for(int i=1;i<5;i++){ try { Thread.sleep(500); } catch(InterruptedException e) {System.out.println(e); } System.out.println(i); } } public static void main(String args[]){ TestSleepMethod1 t1=new TestSleepMethod1(); TestSleepMethod1 t2=new TestSleepMethod1(); t1.start(); t2.start(); } }
  • 23. Amity School of Engineering & Technology Can we start a thread twice public class TestThreadTwice1 extends Thread{ public void run(){ System.out.println("running..."); } public static void main(String args[]){ TestThreadTwice1 t1=new TestThreadTwice1(); t1.start(); t1.start(); } }
  • 24. Amity School of Engineering & Technology What if we call run() method directly instead start() method? class TestCallRun1 extends Thread{ public void run(){ System.out.println("running..."); } public static void main(String args[]){ TestCallRun1 t1=new TestCallRun1(); t1.run();//fine, but does not start a separate call stack } }
  • 25. Amity School of Engineering & Technology class TestCallRun2 extends Thread{ public void run(){ for(int i=1;i<5;i++){ try{Thread.sleep(500);}catch(InterruptedException e){System.out.println(e);} System.out.println(i); } } public static void main(String args[]){ TestCallRun2 t1=new TestCallRun2(); TestCallRun2 t2=new TestCallRun2(); t1.run(); t2.run(); } } Problem if you direct call run() method
  • 26. Amity School of Engineering & Technology The join() method • The join() method waits for a thread to die. In other words, it causes the currently running threads to stop executing until the thread it joins with completes its task. Syntax: • public void join() throws InterruptedException • public void join(long milliseconds) throws InterruptedException
  • 27. Amity School of Engineering & Technology Example of join() method class TestJoinMethod1 extends Thread{ public void run(){ for(int i=1;i<=5;i++){ try{ Thread.sleep(500); }catch(Exception e){System.out.println(e);} System.out.println(i); } } public static void main(String args[]){ TestJoinMethod1 t1=new TestJoinMethod1(); TestJoinMethod1 t2=new TestJoinMethod1(); TestJoinMethod1 t3=new TestJoinMethod1(); t1.start(); try{ t1.join(); }catch(Exception e){System.out.println(e);} t2.start(); t3.start(); } }
  • 28. Amity School of Engineering & Technology Example of join(long miliseconds) method class TestJoinMethod2 extends Thread{ public void run(){ for(int i=1;i<=5;i++){ try{ Thread.sleep(500); }catch(Exception e){System.out.println(e);} System.out.println(i); } } public static void main(String args[]){ TestJoinMethod2 t1=new TestJoinMethod2(); TestJoinMethod2 t2=new TestJoinMethod2(); TestJoinMethod2 t3=new TestJoinMethod2(); t1.start(); try{ t1.join(1500); }catch(Exception e){System.out.println(e);} t2.start(); t3.start(); } }
  • 29. Amity School of Engineering & Technology getName(),setName(String) and getId() method: class TestJoinMethod3 extends Thread{ public void run(){ System.out.println("running..."); } public static void main(String args[]){ TestJoinMethod3 t1=new TestJoinMethod3(); TestJoinMethod3 t2=new TestJoinMethod3(); System.out.println("Name of t1:"+t1.getName()); System.out.println("Name of t2:"+t2.getName()); System.out.println("id of t1:"+t1.getId()); t1.start(); t2.start(); t1.setName("Sonoo Jaiswal"); System.out.println("After changing name of t1:"+t1.getName()); } } public String getName() public void setName(String name) public long getId()
  • 30. Amity School of Engineering & Technology The currentThread() method: The currentThread() method returns a reference to the currently executing thread object. Syntax: public static Thread currentThread() class TestJoinMethod4 extends Thread{ public void run(){ System.out.println(Thread.currentThread().getName()); } } public static void main(String args[]){ TestJoinMethod4 t1=new TestJoinMethod4(); TestJoinMethod4 t2=new TestJoinMethod4(); t1.start(); t2.start(); } }
  • 31. Amity School of Engineering & Technology Naming Thread and Current Thread Naming Thread • The Thread class provides methods to change and get the name of a thread. By default, each thread has a name i.e. thread-0, thread-1 and so on. We can change the name of the thread by using setName() method. The syntax of setName() and getName() methods are given below: • public String getName(): is used to return the name of a thread. • public void setName(String name): is used to change the name of a thread.
  • 32. Amity School of Engineering & Technology class TestMultiNaming1 extends Thread{ public void run(){ System.out.println("running..."); } public static void main(String args[]){ TestMultiNaming1 t1=new TestMultiNaming1(); TestMultiNaming1 t2=new TestMultiNaming1(); System.out.println("Name of t1:"+t1.getName()); System.out.println("Name of t2:"+t2.getName()); t1.start(); t2.start(); t1.setName("Sonoo Jaiswal"); System.out.println("After changing name of t1:"+t1.getName()); } }
  • 33. Amity School of Engineering & Technology State of thread import java.lang.*; public class Threadstate implements Runnable { public void run() { // returns the state of this thread Thread.State state = Thread.currentThread().getState(); System.out.println(Thread.currentThread().getName()); System.out.println("state = " + state); } public static void main(String args[]) { Thread t = new Thread(new Threadstate()); // this will call run() function t.start(); } }
  • 34. Amity School of Engineering & Technology Priority of a Thread (Thread Priority): • Each thread have a priority. Priorities are represented by a number between 1 and 10. In most cases, thread schedular schedules the threads according to their priority (known as preemptive scheduling). But it is not guaranteed because it depends on JVM specification that which scheduling it chooses. 3 constants defiend in Thread class: • public static int MIN_PRIORITY • public static int NORM_PRIORITY • public static int MAX_PRIORITY Default priority of a thread is 5 (NORM_PRIORITY). The value of MIN_PRIORITY is 1 and the value of MAX_PRIORITY is 10.
  • 35. Amity School of Engineering & Technology class TestMultiPriority1 extends Thread{ public void run(){ System.out.println("running thread name is:"+Thread.currentThread().getName()); System.out.println("running thread priority is:"+Thread.currentThread().getPriority()); } public static void main(String args[]){ TestMultiPriority1 m1=new TestMultiPriority1(); TestMultiPriority1 m2=new TestMultiPriority1(); m1.setPriority(Thread.MIN_PRIORITY); m2.setPriority(Thread.MAX_PRIORITY); m1.start(); m2.start(); } }
  • 36. Amity School of Engineering & Technology Daemon Thread in Java Daemon thread in java is a service provider thread that provides services to the user thread. Its life depend on the mercy of user threads i.e. when all the user threads dies, JVM terminates this thread automatically. There are many java daemon threads running automatically e.g. gc, finalizer etc. You can see all the detail by typing the jconsole in the command prompt. The jconsole tool provides information about the loaded classes, memory usage, running threads etc. Points to remember for Daemon Thread in Java • It provides services to user threads for background supporting tasks. It has no role in life than to serve user threads. • Its life depends on user threads. • It is a low priority thread.
  • 37. Amity School of Engineering & Technology Methods for Java Daemon thread by Thread class The java.lang.Thread class provides two methods for java daemon thread. 1) public void setDaemon(boolean status) is used to mark the current thread as daemon thread or user thread. 2) public boolean isDaemon() is used to check that current is daemon.
  • 38. Amity School of Engineering & Technology public class TestDaemonThread1 extends Thread{ public void run(){ if(Thread.currentThread().isDaemon()){//checking for daemon thread System.out.println("daemon thread work"); } else{ System.out.println("user thread work"); } } public static void main(String[] args){ TestDaemonThread1 t1=new TestDaemonThread1();//creating thread TestDaemonThread1 t2=new TestDaemonThread1(); TestDaemonThread1 t3=new TestDaemonThread1(); t1.setDaemon(true);//now t1 is daemon thread t1.start();//starting threads t2.start(); t3.start(); } }
  • 39. Amity School of Engineering & Technology If we make a user thread as Daemon, it must not be started otherwise it will throw IllegalThreadStateException. class TestDaemonThread2 extends Thread{ public void run(){ System.out.println("Name: "+Thread.currentThread().getName()); System.out.println("Daemon: "+Thread.currentThread().isDaemon()); } public static void main(String[] args){ TestDaemonThread2 t1=new TestDaemonThread2(); TestDaemonThread2 t2=new TestDaemonThread2(); t1.start(); t1.setDaemon(true);//will throw exception here t2.start(); } }
  • 40. Amity School of Engineering & Technology Controling the main thread class CurrentThreadDemo { public static void main(String args[]) { Thread t = Thread.currentThread(); System.out.println("Current thread: " + t); // change the name of the thread t.setName("My Thread"); System.out.println("After name change: " + t); try { for(int n = 5; n > 0; n--) { System.out.println(n); Thread.sleep(1000); } } catch (InterruptedException e) { System.out.println("Main thread interrupted"); } } }
  • 41. Amity School of Engineering & Technology Thanks

Editor's Notes

  1. MULTITHREADING REALTIME EXAMPLES Background jobs like running application servers like Oracle application server, Web servers like Tomcat ctc which will come into action whenever a request comes. Performing some execution while I/O blocked. Joint Account holder having multiple ATM cards for same account and trying to perform operation same time . at time one operation is handled for account and then next one on updated data. Typing MS Word document while listening to music. Games are very good examples of threading. You can use multiple objects in games like cars, motor bikes, animals, people etc. All these objects are nothing but just threads that run your game application. Online bus/anything ticket booking : here many users trying to book available ticket at same time (ex : tatkal booking ) , here application needs to handle different threads (diff users request to server ) , if tickets sold out/not available then rest users will get correct response as not available to book .Multiple account holders accessing their accounts simultaneously on the server. When you insert a ATM card, it starts a thread for perform your operations. Servlets are multithreaded.
  2. Per process items | Per thread items ---------------------------------|----------------- Address space | Program counter Global variables | Registers Open files | Stack Child processes | State Pending alarms | Signals and signal handlers | Accounting information |
  3. Output:thread is running...
  4. If you are not extending the Thread class, your class object would not be treated as a thread object. So you need to explicitely create Thread class object. We are passing the object of your class that implements Runnable so that your class run() method may execute.
  5. As you know well that at a time only one thread is executed. If you sleep a thread for the specified time, the thread shedular picks up another thread and so on.
  6. No. After starting a thread, it can never be started again. If you does so, an IllegalThreadStateException is thrown. In such case, thread will run once but for second time, it will throw exception. Let's understand it by the example given below:
  7. Each thread starts in a separate call stack. Invoking the run() method from main thread, the run() method goes onto the current call stack rather than at the beginning of a new call stack. It will work..
  8. Output:1 2 3 4 5 1 2 3 4 5 there is no context-switching because here t1 and t2 will be treated as normal object not thread object.
  9. Output:1 2 3 4 5 1 1 2 2 3 3 4 4 5 5 when t1 completes its task then t2 and t3 starts executing.
  10. Output:1 2 3 1 4 1 2 5 2 3 3 4 4 5 5  when t1 is completes its task for 1500 miliseconds(3 times) then t2 and t3 starts executing.
  11. Output: Name of t1:Thread-0 Name of t2:Thread-1 id of t1 : 8 running... After changling name of t1:Sonoo Jaiswal running...
  12. Thread-1 Thread-0
  13. C:\Javap\Tpriority>java TestMultiPriority1 running thread name is:Thread-1 running thread name is:Thread-0 running? thread? priority is:10 running? thread? priority is:1 C:\Javap\Tpriority>java TestMultiPriority1 running thread name is:Thread-0 running thread name is:Thread-1 running? thread? priority is:1 running? thread? priority is:10
  14.  Finalize () is the method of Object class. This method is called just before an object is garbage collected. finalize () method overrides to dispose system resources, perform clean-up activities and minimize memory leaks.
  15. Output: daemon thread work ,user thread work ,user thread work
  16. Output: exception in thread main: java.lang.IllegalThreadStateException Exception in thread "main" java.lang.IllegalThreadStateException at java.base/java.lang.Thread.setDaemon(Thread.java:1403) at TestDaemonThread2.main(TestDaemonThread2.java:11) Name: Thread-0 Daemon: false T2 will not start
  17. Current thread: Thread[main,5,main] After name change: Thread[My Thread,5,main] 5 4 3 2 1