Download Athipathy-Threads-in

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

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

C++ 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

Monitor (synchronization) wikipedia , lookup

Thread (computing) wikipedia , lookup

Transcript
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