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

Slides:



Advertisements
Presentaciones similares
CJ02 – Técnicas avanzadas en java 1.4 y 5.0
Advertisements

Programación Interactiva Hilos
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors Sincronización de Threads en Java Josep Joan.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Seminaris de CASO, curs 00/01 - 2Q Multithreading in Java Elisa Gonzalez Anna Mª.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
INFORMATICA III ESCUELA DE INGENIERIA ELECTRONICA DEPARTAMENTO DE SISTEMAS E INFORMATICA.
CONCEPTES AVANÇATS DE SISTEMES OPERATIUS Departament d’Arquitectura de Computadors (Seminaris de CASO) Autors MULTITHREADING & JAVA SYNCHRONIZATION David.
Hilos y Multihilos Un thread (hilo, flujo de control del programa) representa un proceso individual ejecutándose en un sistema. A veces se les llama.
Tema 1: Concurrencia con Java
Curs Programació Java: Sessió 8
TFG – Àrea Enginyeria del programari
Cambios en el espacio: transformaciones geométricas
L’ERA DEL MAQUINISME Àlex Mogena.
Campus Virtual.
Campus Virtual.
TEMA3: Gestió de correu i agenda electrònica
i Threads en JAVA Sockets Lorena Alvarez Montiel – D
Els instruments musicals
Equacions amb dues incògnites.
MÚLTIPLES I DIVISORS.
Tema 2. DIVISIBILITAT.
APRENENTATGE MULTINIVELL
Introducció de TEDIs (COACs) Versió 4.0
Un exemple de Màquina Virtual: el programa VMware
Creació d’un mapa personalitzat
Resolució de problemes algebraics
SISTEMA GESTOR D’EMPRESA D’EXCAVACIONS
Una forma fàcil d'obtenir algunes fórmules
ANÀLISI DELS ESTATS FINANCERS DE L´EMPRESA
El sistema operatiu JavaOS
Què hi ha a l'Univers?.
NOVETATS ESPAI MARGALEF
EL RATPENAT Fet per: Mario Pinto, Raúl García, Kevin Lopez, Coral Moya i Rebeca Lopez.
Tutorials Campus Virtual Càrrega automàtica d’alumnes
Com introduir les Guies Docents
Hi havia una vegada un nen que es deia Tomàs que volia ser mag.
Disseny de la persistència Serialització
EN EL VENTRE DE LA TEVA MARE
Curs de Llenguatge Administratiu Valencià Juli Martínez Amorós
Jonathan Ceballos Rodriguez ( ) Zenón Perisé Alía ( )
Projecte: el mercat 2a PART P -4.
Introducció a la Programació Orientada a Objectes
Explicació de l’enunciat
SCIENCE OF SYNTHESIS.
Disseny de la persistència Serialització
L’electricitat i el circuit elèctric
MORFOLOGIA i SINTAXI PRONOMS RELATIUS i PRONOMS INTERROGATIUS
COM AJUDAR ELS NOSTRES FILLS EN LA TASCA EDUCATIVA
BEGINNER EV3 PROGRAMMING Lesson
Mesuraments d'eficiència d'un raytracer distribuït
ESCOLA ANTONI TÀPIES- 5èB
Les taules de multiplicar
Multithreading i sincronització Edgar Ros Ferrer Xavier Farré Barbera
Meditem escoltant “He menjat el Teu Cos” (7’) de la Passió de Bach
Laura Gualdo Sabaté Núria Lleal Serra Jose Luis Montes Martínez
Passes a seguir per iniciar un nou curs acadèmic en el GestIB
Explica amb detall com ho has fet per decidir el tros que pintes.
Carta de Lincoln al mestre del seu fill (i II)
LA NOVA SELECTIVITAT I L’ACCÉS A LA UNIVERSITAT
La literatura i les matemàtiques van de la mà.
Gestió De Processos En El Linux Kernel 2.4
SISTEMA DUNAR.
Sistema de descàrrega d’aplicacions per a mòbils intel·ligents
Projecte: Videojocs.cat
El SEGUIMENT DE COMPLECIÓ
LES MÀQUINES.
Estils i Plantilles Ms Word.
CONTE LA FADA EMPATIA VISITA UNA ESCOLA.
CABREM TOTS AL GIMNÀS?.
Transcripción de la presentación:

Threads en Java David Gañán Jiménez

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.

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

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

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.

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

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

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.

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

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.  

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

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

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.

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.

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ó

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  

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

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.

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