* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project
Download Athipathy-Threads-in
Go (programming language) wikipedia , lookup
C Sharp syntax wikipedia , lookup
Class (computer programming) wikipedia , lookup
Falcon (programming language) wikipedia , lookup
Object-oriented programming wikipedia , lookup
Java (programming language) wikipedia , lookup
Parallel computing wikipedia , lookup
Scheduling (computing) wikipedia , lookup
Join-pattern wikipedia , lookup
Java performance wikipedia , lookup
C Sharp (programming language) wikipedia , lookup
5/24/2017
Vimal
Threads
By www.PPTSWorld.com
1
Why use threads??
It is a powerful programming tool
Computer users take it for granted that their
systems can do more than one thing at a time.
They assume that they can continue to work in a
word processor, while other applications download
files, manage the print queue, and stream audio.
Even a single application is often expected to do
more than one thing at a time.
Example of a web server: Many clients
accessing….impossible to handle without threads!
5/24/2017
Vimal
2
Use of threads cont..
In Internet: 100 simultaneous connections means
100 processes to handle. Just imagine 100 million
internet users!!
Similarly with web servers..performance crawls
with more simultaneous connections
5/24/2017
Vimal
3
Another example
Streaming audio application must simultaneously
read the digital audio off the network, decompress
it, manage playback, and update its display.
Even the word processor should always be ready to
respond to keyboard and mouse events, no matter
how busy it is reformatting text or updating the
display.
Software that can do such things is known as
concurrent software.
5/24/2017
Vimal
4
Concurrent programming
The Java platform is designed from the ground up
to support concurrent programming, with basic
concurrency support in the Java programming
language and the Java class libraries.
Since version 5.0, the Java platform has also
included high-level concurrency APIs in the
java.util.concurrent packages.
5/24/2017
Vimal
5
Concurrency vs. Parallelism
CPU
main
CPU1
main
CPU2
RAM
run
main
this.count
run
run
main
main
5/24/2017
run
main
Vimal
6
Process & threads
In concurrent programming, there are two basic
units of execution: processes and threads.
In the Java programming language, concurrent
programming is mostly concerned with threads.
However, processes are also important. Threads are
light weight processes!
A computer system normally has many active
processes and threads. This is true even in systems
that only have a single execution core, and thus
only have one thread actually executing at any
given moment.
Processing time for a single core is shared among
processes and threads through an OS feature called
time slicing.
5/24/2017
Vimal
7
What is a thread?
A thread is like a sequential
program.
A single thread has a
beginning, a sequence, and an
end and at any given time
during the runtime of the
thread, there is a single point
of execution.
However, a thread itself is not
a program; it cannot run on its
own. Rather, it runs within a
program.
5/24/2017
Vimal
8
Multiple threads
5/24/2017
Vimal
9
Creating Threads
Two ways of creating threads:
Extending a class.
Implementing an interface
Extending a class is the way Java inherits
methods and variables from a parent class. In
this case, one can only extend or inherit from
a single parent class.
This limitation within Java can be
overcome by implementing interfaces, which
is the most common way to create threads.
5/24/2017
Vimal
10
Implementing thread
start()
run()
To get information from a finished thread is a
challenge especially in a multi-threaded system
return - is used
5/24/2017
Vimal
11
Extending a class
import java.util.*;
class TimePrinter extends Thread {
int pauseTime;
String name;
public TimePrinter(int x, String n)
{ pauseTime = x; name = n; }
public void run()
{
while(true) {
try {
System.out.println(name + ":" + new
Date(System.currentTimeMillis()));
12. Thread.sleep(pauseTime);
} catch(Exception e) { }
13.
} }
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
5/24/2017
Vimal
12
1.
2.
3.
4.
5.
6.
public static void main(String args[]) {
TimePrinter tp1 = new TimePrinter(1000, "Fast Guy");
tp1.start();
TimePrinter tp2 = new TimePrinter(3000, "Slow Guy");
tp2.start();
}}
5/24/2017
Vimal
13
Implementing Runnable interface
import java.util.*;
class TimePrinter implements Runnable {
int pauseTime;
String name;
public TimePrinter (int x, String n)
{ pauseTime = x; name = n; }
public void run() { while(true) {
try {
System.out.println(name + ":" + new
Date(System.currentTimeMillis()));
Thread.sleep(pauseTime);
10.
} catch(Exception e) { }
11.
5/24/2017 } }
Vimal
1.
2.
3.
4.
5.
6.
7.
8.
9.
14
cont
1. public static void main(String args[]) {
2. Thread t1 = new Thread(new
TimePrinter(1000, "Fast Guy"));
t1.start();
3. Thread t2 = new Thread(new
TimePrinter(3000, "Slow Guy"));
t2.start();
4. } }
5/24/2017
Vimal
15
5/24/2017
Vimal
16
Creating Multiple threads
Class newThread implements Runnable
{ String name;Thread t;
NewThread(String threadname)
{ name=threadname;
t=newThread(this,name);
System.out.println(“New Thread:”+t);
t.start();
}
public void run()
{
5/24/2017
Vimal
17
Cont..
try{
For(int i=00;i>0;i--)
{ System.out.println(name +”:”+i);
Thread.sleep(1000);
}catch(IntrrruptedException e){}
System.out.println(name +’exiting);
}
}
5/24/2017
Vimal
18
Cont..
Class MultiThreadDemo
{
public static void main(String args[])
{
new NewThread(“one”);
new NewThread(“two”);
new NewThread(“three”);
try{
Thread.sleep(10000);
}catch(InterruptedException e){}
}}
5/24/2017
Vimal
19
Synchronization
Two or more threads accessing the same data
simultaneously may lead to loss of data integrity.
Java uses the concept of semaphore or monitor to
enable this.
Monitor is an object used as a mutually exclusive
lock.
Synchronized
5/24/2017
Vimal
20
1. Class Consumer implements Runnable {
2. Stock c;
3. Thread t;
4. Consumer (Stock c)
5.
{ this.c=c;
6.
t=new Thread(this,”consumer thread”);
7.
t.start();
}
8. public void run(){
9.
while(true){
10.
try{
11.
t.sleep(750);
12.
}catch(InterruptedEcception e){}
13. c.getStock((int)(Math.random()*100));
14.
}
}
5/24/2017
15.
void stop(){ t.stop() } } Vimal
C
o
n
s
u
m
e
r.
j
a
v
a21
1. Class Producer implements Runnable {
2. Stock c;
3. Thread t;
4. Producer (Stock c)
5.
{ this.c=c;
6.
t=new Thread(this,”producer thread”);
7.
t.start(); }
8. public void run() {
9.
while(true) {
10.
try{
11.
t.sleep(750);
12.
}catch(InterruptedExcception e){}
13.
c.getStock((int)(Math.random()*100));
14. }
}
5/24/2017
15.
void stop(){ t.stop() } } Vimal
P
r
o
d
u
c
e
r.
j
a
v
a
22
Stock.java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Class Stock {
int goods=0;
Public synchronized void addStock(int i)
{ goods=goods+i;
System.out.println(“Stock added:”+i);
System.out.println(“Present Stock:”+goods);
notify();
}
public synchronised int getStock(int j)
{ while(true)
{
5/24/2017
Vimal
23
•
•
•
•
•
•
•
•
•
•
•
•
•
if(goods >=j)
{ goods=goods=goods-j;
System.out.println(“Stock taken away:”+i);
System.out.println(“Present Stock:”+goods);
break;
}else {
System.out.println(“Stock not enough:”+i);
System.out.println(“Waiting for stocks to
come:”+goods);
try {
wait();
}catch(InterruptedException e){}
}}
return goods; }
5/24/2017
Vimal
24
•
•
•
•
•
•
•
•
•
•
•
public static void main(String args[])
{ Stock= new Stock();
Producer p= new Producer(j);
Consumer c=new Consumer(j);
try{
Thread.sleep(10000);
p.stop();
c.stop();
}catch(InterrruptedException e){}
}
}
5/24/2017
Vimal
25