L3 Threads
L3 Threads
Distributed Applications:
Multithreaded Programming
using Java Threads
1
Outline
Introduction
Thread Applications
Defining Threads
Java Threads and States
Architecture of Multithreaded servers
Threads Synchronization
Summary
2
Introduction
We discuss how Middleware is supported by the
Operating System (OS) facilities at the nodes of a
distributed system.
The OS facilitates:
Encapsulation and protection of resources inside
servers;
It supports invocation of mechanisms required
to access those resources including concurrent
access/processing.
3
Middleware and Network Operating
System (NOS)
Many DOS (Distributed OS) have been investigated, but there
are none in general/wide use. But NOS are in wide use for
various reasons both technical and non-technical.
Users do have much invested in their application software;
they will not adopt a new OS that will not run their
applications.
The 2nd reason against the adoption of DOS is that users
tend to prefer to have a degree of autonomy of their
machines, even in a closely knit organisation.
A combination of middleware and NOSs provides an
acceptable balance between the requirement of autonomy and
network transparency.
NOS allows users to run their favorite word processor.
Middleware enables users to take advantage of services that
become available in their distributed system.
4
Introducing a middleware
Building Distributed Systems
DOS or NOS are not enough to build a DS!
NOS are a good starting point but ….
… we need an additional layer “gluing” all together
Middleware
NOS
Building Distributed Systems
Middleware
High-level features for DS
Communication
Management
Application specific
Uniform layer where to build DS services
Runtime environment of applications
Operating System
Low / medium level (core) features
Process / threads management
Local hardware (CPU, disk, memory)
Security (users, groups, domain, ACLs)
Basic networking
Operating system layers and
Middleware
Applications, services
Middleware
Communication
manager
Supervisor
8
Threaded Applications
Modern Applications & Systems
Operating System Level
Multitasking: multiple applications running at once
Application Level
Multithreading: multiple operations performed at the same time
Bottom Line:
Illusion of concurrency
Threaded Applications
Modern Systems
Multiple applications run concurrently!
This means that… there are multiple processes on your
computer
games
multimedia
pictures
Multitasking
A single threaded program
class ABC
{
….
public void main(..) begin
{
… body
..
end
}
}
11
Threaded Applications
Modern Systems
Applications perform many tasks at once!
This means that… there are multiple threads within a
single process.
Background printing
GUI rendering
Main Thread
start
start start
Client 1
Client 2
Client N
Threaded Applications
Modern Applications
Example: Internet Browser + Youtube
Video Streaming
Favorities, Share,
Comments Posting
Modern Applications need Threads (ex1):
Editing and Printing documents in background.
Printing Thread
Editing Thread
17
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]);
- - - - - - - - - - - - - - - - - - -
- }
}
Main Thread
while <running>
{
<wait for request>
<create a new worker thread>
<start the thread>
Execution Timeline
} <request 1>
Web/FTP
server Worker
Thread <request 2>
22
Threading Mechanisms...
Create a class that extends the Thread class
Create a class that implements the Runnable
interface
MyThread MyClass
[a] [b]
23
1st method: Extending Thread class
Create a class by extending Thread class and override run()
method:
class MyThread extends Thread
{
public void run()
{
// thread body of execution
}
}
Create a thread:
MyThread thr1 = new MyThread();
Start Execution of threads:
thr1.start();
Create and Execute:
new MyThread().start();
24
An example
class MyThread extends Thread {
public void run() {
System.out.println(" this thread is running ... ");
}
}
class ThreadEx1 {
public static void main(String [] args ) {
MyThread t = new MyThread();
t.start();
}
}
25
2nd method: Threads by implementing
Runnable interface
Create a class that implements the interface Runnable and override run()
method:
class MyThread implements Runnable
{
.....
public void run()
{
// thread body of execution
}
}
Creating Object:
MyThread myObject = new MyThread();
Creating Thread Object:
Thread thr1 = new Thread( myObject );
Start Execution:
thr1.start();
26
An example
class MyThread implements Runnable {
public void run() {
System.out.println(" this thread is running ... ");
}
}
class ThreadEx2 {
public static void main(String [] args ) {
Thread t = new Thread(new MyThread());
t.start();
}
}
27
Life Cycle of Thread
new
start()
I/O completed
ready resume()
Time expired/
notify() interrupted
sleeping blocked
waiting
dispatch
sleep()
wait() suspend()
running Block on I/O
completion
28
stop() dead
A Program with Three Java Threads
Write a program that creates 3 threads
29
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);
}
System.out.println("Exit from A");
}
}
30
Three threads example
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();
}
}
31
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
32
Run 2
[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
33
Thread Priority
In Java, each thread is assigned priority, which
affects the order in which it is scheduled for
running. The threads so far had same default
priority (NORM_PRIORITY) and they are served
using FCFS policy.
Java allows users to change priority:
ThreadName.setPriority(intNumber)
MIN_PRIORITY=1
NORM_PRIORITY=5
MAX_PRIORITY=10
34
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);
}
System.out.println("Exit from A");
}
}
class B extends Thread
{
public void run()
{
System.out.println("Thread B started");
for(int j=1;j<=4;j++)
{
System.out.println("\t From ThreadB: j= "+j);
}
System.out.println("Exit from B");
}
}
35
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);
System.out.println("Started Thread A");
threadA.start();
System.out.println("Started Thread B");
threadB.start();
System.out.println("Started Thread C");
threadC.start();
System.out.println("End of main thread");
36 }
}
Assignment 1: Multithreaded Dictionary Server
– Demonstrates the use of Sockets and Threads
A Client Program
Meaning(“love”)?
A Client
Program in “C” A Client
Meaning(“java”)? Program in “C++”
Meaning(“channel”)?
37
Use of Sockets in Assignment 1:
A Suggestion
First time:
Use TCP Sockets
Prior background in TCP Sockets:
Use UDP Sockets
38
Accessing Shared Resources
Applications access to shared resources need to be
coordinated.
Printer (two person jobs cannot be printed at the same
time)
Simultaneous operations on your bank account.
Can the following operations be done at the same time
on the same account?
Deposit()
Withdraw()
Enquire()
39
Online Bank: Serving Many
Customers and Operations
Internet
Bank Server
Client 1 Bank Operator 1
Client 2
Bank Operator M
41
the driver: 3 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()
}
42
Shared account object between 3
threads
class MyThread implements Runnable {
Account account;
public MyThread (Account s) { account = s;}
public void run() { account.deposit(); }
} // end class MyThread
44
Architecture for Multithread Servers
Multithreading enables servers to maximize their
throughput, measured as the number of requests
processed per second.
Threads may need to treat requests with varying
priorities:
A corporate server could prioritize request processing
according to class of customers.
Architectures:
Worker pool
Thread-per-request
Thread-per-connection
Thread-per-object
45
Client and server with threads
(worker-pool architecture)
Thread 2 makes
requests to server
Receipt & Input-output
queuing
Thread 1
generates
results
T1
Requests
N threads
Client
Server
P added
Process Process
A B SA preempted
Process SA unblocked
SA blocked
Kernel
P idle
Virtual processors Kernel
P needed
48
Invocations between address spaces
(a) System call Control transfer via
Thread
trap instruction
Protection domain
(b) RPC/RMI (within one computer) boundary
Thread 1 Thread 2
User 1 User 2
Kernel 1 Kernel 2
49
A lightweight remote procedure call
Client Server
A stack
A
Kernel
2. Trap to Kernel 3. Upcall 5. Return (trap)
50
Times for serialized and concurrent
invocations Serialised invocations Concurrent invocations
process args process args
marshal marshal
Send transmission Send
process args
marshal
Receive Send Receive
unmarshal unmarshal
execute request execute request
marshal marshal
Send Send
Receive
unmarshal
Receive Receive execute request
unmarshal unmarshal marshal
process results process results Send
process args
marshal Receive
Send unmarshal
process results
Receive time
unmarshal
execute request
marshal
Send
Receive
unmarshal
process results
Client Server Client Server
51
Summary
Operating system provides various types of facilities to support
middleware for distributed system:
encapsulation, protection, and concurrent access and management of node
resources.
Multithreading enables servers to maximize their throughput, measured as
the number of requests processed per second.
Threads support treating of requests with varying priorities.
Various types of architectures can be used in concurrent processing:
Worker pool
Thread-per-request
Thread-per-connection
Thread-per-object
Threads need to be synchronized when accessing and manipulating shared
resources.
New OS designs provide flexibility in terms of separating mechanisms
from policies.
52