Athipathy-Threads-in-java

buninnateSoftware and s/w Development

Nov 18, 2013 (3 years and 6 months ago)

67 views

11/18/2013

Vimal

1

Threads

By www.PPTSWorld.com

11/18/2013

Vimal

2

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!


11/18/2013

Vimal

3

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

11/18/2013

Vimal

4

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.


11/18/2013

Vimal

5

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.

11/18/2013

Vimal

6

Concurrency vs. Parallelism

CPU1

CPU2

main

main

run

CPU

main

run

main

run

main

run

main

RAM

this.count

11/18/2013

Vimal

7

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.

11/18/2013

Vimal

8

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
.




11/18/2013

Vimal

9

Multiple threads

11/18/2013

Vimal

10

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
.

11/18/2013

Vimal

11

Implementing thread


start()


run()


To get information from a finished thread is a
challenge especially in a multi
-
threaded system


return
-

is used

11/18/2013

Vimal

12

Extending a class

1.
import java.util.*;

2.
class TimePrinter extends Thread {

3.
int pauseTime;

4.
String name;

5.
public TimePrinter(int x, String n)

6.

{ pauseTime = x; name = n; }

7.

public void run()

8.

{

9.

while(true) {

10.

try {

11.
System.out.println(name + ":" + new
Date(System.currentTimeMillis()));

12.
Thread.sleep(pauseTime); } catch(Exception e) { }

13.

} }



11/18/2013

Vimal

13

1.
public static void main(String args[]) {

2.
TimePrinter tp1 = new TimePrinter(1000, "Fast Guy");

3.

tp1.start();

4.

TimePrinter tp2 = new TimePrinter(3000, "Slow Guy");

5.

tp2.start();

6.

}

}


11/18/2013

Vimal

14

Implementing Runnable interface

1.
import java.util.*;

2.
class TimePrinter
implements Runnable

{

3.

int pauseTime;

4.
String name;

5.

public TimePrinter (int x, String n)

6.
{ pauseTime = x; name = n; }

7.

public void run() { while(true) {

8.

try {

9.

System.out.println(name + ":" + new
Date(System.currentTimeMillis()));
Thread.sleep(pauseTime);

10.

} catch(Exception e) { }

11.

} }


11/18/2013

Vimal

15

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.

}

}


11/18/2013

Vimal

16

11/18/2013

Vimal

17

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()


{


11/18/2013

Vimal

18

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);

}

}


11/18/2013

Vimal

19

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){}

}}


11/18/2013

Vimal

20

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

11/18/2013

Vimal

21

C
o
n
s
u
m
e
r.
j
a
v
a

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.

} }

15.
void stop(){ t.stop() } }


11/18/2013

Vimal

22

P
r
o
d
u
c
e
r.
j
a
v
a

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.
} }

15.
void stop(){ t.stop() } }




11/18/2013

Vimal

23

Stock.java

1.
Class Stock {

2.

int goods=0;

3.
Public synchronized void addStock(int i)

4.
{ goods=goods+i;

5.

System.out.println(“Stock added:”+i);

6.

System.out.println(“Present Stock:”+goods);

7.

notify();

8.
}

9.
public synchronised int getStock(int j)

10.

{ while(true)

11.

{

11/18/2013

Vimal

24


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; }



11/18/2013

Vimal

25


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){}


}


}