Software Distribuït - T5

Anuncio
Threads en JAVA
Software Distribuı̈t - T5 - Threads
Eloi Puertas i Prats
Universitat de Barcelona
Grau en Enginyeria Informàtica
27 de febrer de 2014
1 / 13
Eloi Puertas i Prats
Software Distribuı̈t - T5 - Threads
Threads en JAVA
Processos concurrents
Els Sistemes Operatius d’avui en dia, poden fer com si múltiples
processos s’executin concurrentment en una sola CPU, fent que els
recursos siguin de temps compartit entre els processos.
2 / 13
Eloi Puertas i Prats
Software Distribuı̈t - T5 - Threads
Threads en JAVA
Perquè són útils els threads
Aprofitament de múltiples processadors.
Simplicitat del modelat.
Gestió más sencilla d’events ası́ncrons.
Interfı́cies d’usuari amb millor resposta.
3 / 13
Eloi Puertas i Prats
Software Distribuı̈t - T5 - Threads
Threads en JAVA
Fils d’execució concurrents dins d’un procés. Threads.
Un procés pot tenir fils d’execució paral.lels (Threads). Tots els fils
estan compartint els mateixos recursos dins del procés.
A parent process may spawn child processes.
A process may spawn child threads
a process
parent process
main thread
child thread 1
child thread 2
child processes
Concurrent processing within a process
4 / 13
Eloi Puertas i Prats
Software Distribuı̈t - T5 - Threads
Threads en JAVA
Threads a Java
La màquina virtual de java pemet que una aplicació tingui múltiples fils
d’execució, executant-se concurrentment.
Java proporciona una classe Thread:
public class Thread extends Object implements
Runnable
Quan s’engega una JVM, normalment existeix un sol fil d’execució. Es
continua executant els fils fins que:
S’ha cridat al mètode exit() de la classe Runtime
Tots les threads han acabat, ja sigui perquè han retornat de la
crida del mètode run o perquè han llençat una excepció que s’ha
propagat més enllà del mètode run.
5 / 13
Eloi Puertas i Prats
Software Distribuı̈t - T5 - Threads
Threads en JAVA
Creació de Threads en Java
Creant una classe que heredi de la classe Thread
Creant una classe que implementi la interfı́cie Runnable i
passant-la com a paràmetre al constructor de la classe Thread
6 / 13
Eloi Puertas i Prats
Software Distribuı̈t - T5 - Threads
Threads en JAVA
Extenent un Thread en java
Declarar una class que sigui una subclasse de Thread. Aquesta
subclasse ha de sobrescriure el mètode run() de la classe Thread.
Llavors es pot declarar una instància d’aquesta subclasse i començar
la seva execució amb el mètode start()
Thread
...
run( )
sleep( )
start( )
RunThreads
A Java
application
illustrating the
use of Thread
class
7 / 13
SomeThread
myID
run( )
Eloi Puertas i Prats
Software Distribuı̈t - T5 - Threads
Threads en JAVA
Extenent un Thread en java
p u b l i c c l a s s SimpleThread extends Thread {
p u b l i c SimpleThread ( S t r i n g s t r ) {
super ( s t r ) ;
}
p u b l i c v o i d run ( ) {
f o r ( i n t i = 0 ; i < 1 0 ; i ++) {
System . o u t . p r i n t l n ( i + ” ” + getName ( ) ) ;
try {
s l e e p ( ( l o n g ) ( Math . random ( ) ∗ 1 0 0 0 ) ) ;
} c a t c h ( I n t e r r u p t e d E x c e p t i o n e ) {}
}
System . o u t . p r i n t l n ( ”DONE! ” + getName ( ) ) ;
}
}
8 / 13
Eloi Puertas i Prats
Software Distribuı̈t - T5 - Threads
Threads en JAVA
Engegant dos threads que extenen de Thread
p u b l i c c l a s s TwoThreadsDemo {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] args ) {
new SimpleThread ( ” Jamaica ” ) . s t a r t ( ) ;
new SimpleThread ( ” F i j i ” ) . s t a r t ( ) ;
}
}
9 / 13
Eloi Puertas i Prats
Software Distribuı̈t - T5 - Threads
Threads en JAVA
Implementat un Runnable i associar-lo amb un Thread en
java
Una altra forma de declarar un Thread és declarant una classe que
implementi la interfı́cie Runnable. Llavors, aquest classe ha
d’implementar forçosament el mètode run(). Finalmment, una
instància d’aquesta classe es passa com a argument quan es crea el
nou Thread, i s’engega amb el mètode start().
Thread
...
RunThreads2
A Java
application
illustrating the
use of the
Runnable
interface
run( )
sleep( )
start( )
SomeThread2
myID
Runnable
run( )
10 / 13
Eloi Puertas i Prats
Software Distribuı̈t - T5 - Threads
Threads en JAVA
Implementat un Runnable
p u b l i c c l a s s SimpleThread implements Runnable {
p u b l i c SimpleThread ( S t r i n g s t r ) {
super ( s t r ) ;
}
p u b l i c v o i d run ( ) {
f o r ( i n t i = 0 ; i < 1 0 ; i ++) {
System . o u t . p r i n t l n ( i + ” ” + getName ( ) ) ;
try {
s l e e p ( ( l o n g ) ( Math . random ( ) ∗ 1 0 0 0 ) ) ;
} c a t c h ( I n t e r r u p t e d E x c e p t i o n e ) {}
}
System . o u t . p r i n t l n ( ”DONE! ” + getName ( ) ) ;
}
}
11 / 13
Eloi Puertas i Prats
Software Distribuı̈t - T5 - Threads
Threads en JAVA
Engegant dos threads que implementen Runnabe
p u b l i c c l a s s TwoThreadsDemo {
p u b l i c s t a t i c v o i d main ( S t r i n g [ ] args ) {
new Thread ( SimpleThread ( ” Jamaica ” ) ) . s t a r t ( ) ;
new Thread ( SimpleThread ( ” F i j i ” ) ) . s t a r t ( ) ;
}
}
12 / 13
Eloi Puertas i Prats
Software Distribuı̈t - T5 - Threads
Threads en JAVA
Resultat de l’Execució
Code Source TwoThreadsDemo.java
13 / 13
Eloi Puertas i Prats
Software Distribuı̈t - T5 - Threads
Descargar