Multithreaded Programming in Java
Multithreaded Programming in Java
in Java
1
Agenda
Introduction
Thread Applications
Defining Threads
Java Threads and States
Examples
2
A single threaded program
class ABC
{
….
public void main(..) begin
{
… body
..
end
}
}
3
A Multithreaded Program
Main Thread
start
start start
PC client
Internet
Server
Local Area Network
PD
A
5
Multithreaded Server: For Serving
Multiple Clients Concurrently
Server
Threads
Internet
Client 2 Process
6
Modern Applications need Threads (ex1):
Editing and Printing documents in background.
Printing Thread
Editing Thread
7
Multithreaded/Parallel File Copy
reader()
{ writer()
- - - - - - - - - buff[0] {
- - - - - - - - - - -
lock(buff[i]); lock(buff[i]);
read(src,buff[i]); buff[1]
write(src,buff[i]);
unlock(buff[i]); unlock(buff[i]);
- - - - - - - - - - - - - - - - - - -
- }
}
Fine grain
a ( 0 ) =.. a ( 1 )=.. a ( 2 )=.. (data level)
Compilers b ( 0 ) =.. b ( 1 )=.. b ( 2 )=..
Loop (Compiler)
10
Multithreading - Multiprocessors
Process Parallelism
CPU
P1
P2 CPU
P3 CPU
time
11
Multithreading on Uni-processor
Concurrency Vs Parallelism
Process Concurrency
P1
P2 CPU
P3
time
14
Threading Mechanisms...
Create a class that extends the Thread class
Create a class that implements the Runnable
interface
15
1st method: Extending Thread
class
Threads are implemented as objects that
contains a method called run()
class MyThread extends Thread
{
public void run()
{
// thread body of execution
}
}
Create a thread:
MyThread thr1 = new MyThread();
Start Execution of threads:
thr1.start();
16
An example
class MyThread extends Thread { // the thread
public void run() {
System.out.println(" this thread is running ... ");
}
} // end class MyThread
17
2nd method: Threads by
implementing Runnable interface
class MyThread implements Runnable
{
.....
public void run()
{
// thread body of execution
}
}
Creating Object:
thr1.start();
18
An example
class MyThread implements Runnable {
public void run() {
System.out.println(" this thread is running ... ");
}
} // end class MyThread
class ThreadEx2 {
public static void main(String [] args ) {
Thread t = new Thread(new MyThread());
// due to implementing the Runnable interface
// I can call start(), and this will call run().
t.start();
} // end main()
} // end class ThreadEx2
19
Life Cycle of Thread
new
wait()
start() sleep()
suspend()
blocked
runnable non-runnable
notify()
stop()
slept
resume()
dead unblocked
20
A Program with Three Java Threads
21
Three threads example
class A extends Thread
{
public void run()
{
for(int i=1;i<=5;i++)
{
System.out.println("\t From ThreadA: i= "+i);
}
}
for(int j=1;j<=5;j++)
{
System.out.println("\t From ThreadB: j= "+j);
}
} 22
class C extends Thread
{
public void run()
{
for(int k=1;k<=5;k++)
{
System.out.println("\t From ThreadC: k= "+k);
}
}
class ThreadTest
{
public static void main(String args[])
{
new A().start();
new B().start();
new C().start();
}
}
23
Run 1
[raj@mundroo] threads [1:76] java ThreadTest
From ThreadA: i= 1
From ThreadA: i= 2
From ThreadA: i= 3
From ThreadA: i= 4
From ThreadA: i= 5
Exit from A
From ThreadC: k= 1
From ThreadC: k= 2
From ThreadC: k= 3
From ThreadC: k= 4
From ThreadC: k= 5
Exit from C
From ThreadB: j= 1
From ThreadB: j= 2
From ThreadB: j= 3
From ThreadB: j= 4
From ThreadB: j= 5
Exit from B
24
Run2
[raj@mundroo] threads [1:77] java ThreadTest
From ThreadA: i= 1
From ThreadA: i= 2
From ThreadA: i= 3
From ThreadA: i= 4
From ThreadA: i= 5
From ThreadC: k= 1
From ThreadC: k= 2
From ThreadC: k= 3
From ThreadC: k= 4
From ThreadC: k= 5
Exit from C
From ThreadB: j= 1
From ThreadB: j= 2
From ThreadB: j= 3
From ThreadB: j= 4
From ThreadB: j= 5
Exit from B
Exit from A
25
Process Parallelism
int add (int a, int b, int & result)
// function stuff
int sub(int a, int b, int & result) Data
// function stuff Processor
IS1 a
add
pthread t1, t2;
b
pthread-create(&t1, add, a,b, & r1); r1
Processor
pthread-create(&t2, sub, c,d, & r2); c
pthread-par (2, t1, t2); IS2
sub d
r2
MISD and MIMD Processing
26
Data Parallelism
sort( int *array, int count) Data
//......
Processor
//...... do
Sort
“
pthread-t, thread1, thread2; “
“ IS
“ dn/2
pthread-create(& thread1, sort, array, N/2);
pthread-create(& thread2, sort, array, N/2); Processor
pthread-par(2, thread1, thread2);
dn2/+1
Sort “
“
dn
SIMD Processing
27
Next Class
Thread Synchronisation
Thread Priorities
28
Accessing Shared Resources
29
Online Bank: Serving Many Customers
and Operations
PC client
Internet Bank
Server
Local Area Network
Bank
Database PD
A
30
Shared Resources
31
the driver: 3rd Threads sharing
the same object
class InternetBankingSystem {
public static void main(String [] args ) {
Account accountObject = new Account ();
Thread t1 = new Thread(new MyThread(accountObject));
Thread t2 = new Thread(new YourThread(accountObject));
Thread t3 = new Thread(new HerThread(accountObject));
t1.start();
t2.start();
t3.start();
// DO some other operation
} // end main()
}
32
Program with 3 threads
and shared object
class MyThread implements Runnable {
Account account;
public MyThread (Account s) { account = s;}
public void run() { account.deposit(); }
} // end class MyThread
34
Thread Priority
35
Thread Priority Example
class A extends Thread
{
public void run()
{
System.out.println("Thread A started");
for(int i=1;i<=4;i++)
{
System.out.println("\t From ThreadA: i= "+i);
}
for(int j=1;j<=4;j++)
{
System.out.println("\t From ThreadB: j= "+j);
}
36
Thread Priority Example
class C extends Thread
{
public void run()
{
System.out.println("Thread C started");
for(int k=1;k<=4;k++)
{
System.out.println("\t From ThreadC: k= "+k);
}
System.out.println("Exit from C");
}
}
class ThreadPriority
{
public static void main(String args[])
{
A threadA=new A();
B threadB=new B();
C threadC=new C();
threadC.setPriority(Thread.MAX_PRIORITY);
threadB.setPriority(threadA.getPriority()+1);
threadA.setPriority(Thread.MIN_PRIORITY);