La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Threads en Java David Gañán Jiménez.

Presentaciones similares


Presentación del tema: "Threads en Java David Gañán Jiménez."— Transcripción de la presentación:

1 Threads en Java David Gañán Jiménez

2 Introducció (I) Java es un llenguatge interpretat, per tant necessita una màquina virtual per executar-se. A l’iniciar la JVM per executar un programa es crea un thread principal que executarà el mètode main. Dins d’aquest podem crear nous threads d’execució. Podem doncs considerar la JVM com un procés o entorn d’execució, dins del qual es poden executar diferents threads.

3 Introducció (II) Java té dos tipus de threads: Green
Green implementats a nivell d’usuari (llibreria) la seva interfície està definida per SUN i és comuna a tots els sistemes Native implementats mitjançant crides a les interfícies proporcionades per cada plataforma

4 Introduccio (III) Avantatges Inconvenients
fàcils de crear i fer servir codi més portable Inconvenients menor flexibilitat (menys configurables)

5 Creació d’un Thread (I)
Extendre la classe Thread 1.- Heretar de la classe Thread Public class MyThread extends Thread { ….. } 2.- Sobreescriure el mètode run() 3.- Crear una instància de la subclasse.

6 Creació d’un Thread (II)
Implementar la interface Runnable 1.- Fer que la classe implementi la interface Runnable Public class nomClasse implements Runnable { … } 2.- Implementar el mètode run() 3.- Crear un thread passant-li com a paràmetre una instància de la classe Runnable: nomClasse n = new nomClasse (); Thread t = new Thread (n);

7 Estats d’un thread (I) Un thread pot tenir diferents estats durant la seva execució: start() en execució executable nou bloquejat mort S’acaba l’execució del mètode run yield()

8 Estats d’un thread (II)
Nou encara no esta preparat per executar. el mètode start () prepara el thread per a execució Executable el thread esta disponible per a executar passarà a estar en execució quan ho determini l’scheduler.

9 Estats d’un thread (III)
En execució s’executa mentre duri el seu temps de CPU pot cedir la CPU a altres threads amb la mateixa prioritat, mitjançant el mètode yield () passarà a estar bloquejat si executa alguna de les següents operacions: join(), sleep(), wait() o E/S el thread passarà a estar mort quan s’acabi l’execució del mètode run

10 Estats d’un thread (IV)
Bloquejat el thread esta inactiu, en espera torna a l’estat executable quan:  acaba el thread pel qual ha fet el join es desperta d’un sleep es crida a notify () o notifyAll() acaba l’execució de la E/S  Mort s’ha acabat d’executar el mètode run() el garbage collector eliminarà els recursos del Thread.

11 Sincronització (I) Accés en exclusió mútua a variables compartides mitjançant blocs i mètodes synchronized, que només poden ser executats per un únic Thread alhora. Exemple amb bloc synchronized ClasseCompartida variableCompartida;   // bloqueig del recurs synchronized ( variableCompartida ) { // accés al recurs } // desbloqueig del recurs

12 Sincronització (II) Exemple amb mètode synchronized (dins de la classe (ClasseCompartida) public synchronized void accesDades () { // accés al recurs }   ClasseCompartida variableCompartida; // bloqueig del recurs variableCompartida.accesDades (); // desbloqueig del recurs

13 Monitors (I) Un monitor permet a un thread bloquejar-se fins que un altre thread el desbloquegi. Qualsevol objecte Java pot fer de monitor. Cada objecte guarda una llista dels threads que estan bloquejats en ell. La classe Object té els següents mètodes per a bloquejar i desbloquejar threads: wait El thread es bloqueja en la llista d’espera de l’objecte sobre el qual crida a wait, fins que un altre thread executi el mètode notify o notifyAll del mateix objecte.

14 Monitors (II) notify fa que es desbloquegi un dels threads que està a la cua d’espera de l’objecte notifyAll fa que es desbloquegin tots els threads que estan a la cua d’espera de l’objecte aquests mètodes s’han d’executar dins d’un mètode o un bloc synchronized.

15 Scheduling de threads (I)
L’scheduler manté una llista amb els threads que estan en estat executable, per decidir quins threads s’executen i quins s’esperen Generalment s’escolleix el que té prioritat més altra, llevat d’alguns casos en que s’agafa algun de menor prioritat per evitar inanició. La política de planificació pot ser: preemtiva execució amb un quantum de temps no-preemtiva execució fins a sortir del procesador per E/S, wait, sleep, o perquè acaba l’execució

16 Scheduling de threads (II)
La prioritat d’un nou thread és la mateixa que la del thread que el crea  La prioritat d’un thread està entre 1 i 10 Prioritat per defecte NORM_PRIORITY = 5 MIN_PRIORITY = 1 MAX_PRIORITY = 10 getPriority permet conèixer la prioritat actual d’un thread setPriority permet modificar la prioritat actual d’un thread  

17 Scheduling de threads (III)
Threads daemon - També anomenats serveis - S’executen amb prioritat baixa i proporcionen un servei bàsic a un programa - Per exemple el garbage collector - setDaemon() - isDaemon()

18 ThreadGroups Cada thread pertany a un grup de threads (ThreadGroup). Si no s’especifica, els threads pertanyen al ThreadGroup per defecte main. Un ThreadGroup pertany a la seva vegada a un altre ThreadGroup A l’hora de crear un thread es pot especificar a quin grup pertany. Els threads no poden canviar de grup durant la seva execució Els ThreadGroup permeten fer operacions sobre tots els threads que hi pertanyen alhora.

19 Bibliografia http://java.sun.com/docs/books/tutorial/essential/
threads/index.html Tutorial de Java de SUN. Threads: Doing Two or More Tasks At Once  Aprenda Java como si estuviera en primero Apunts de l’Escola Superior d’Enginyers Industrials de la Universitat de Navarra


Descargar ppt "Threads en Java David Gañán Jiménez."

Presentaciones similares


Anuncios Google