introducció a la concurrència amb el llenguatge java

3
28/04/14 08:55 Introducció a la Concurrència amb el llenguatge Java Pàgina 1 de 3 https://ce.uib.es/estudis1213/file.php/739/Documentacio/Introduccio_JavaPC.html Introducció a la Concurrència amb el llenguatge Java El llenguatge de Programació Java està dissenyat per poder fer ús de més d'un trhead d'execució. Per tant és possible dissenyar un programa concurrent utilitzant Java. La primera cosa a tenir en compte a l'hora d'escollir un llenguatge de programació és determinar quines funcionalitats ofereix. Declaració de processos en Java En java els processos es defineixen com objectes de classes que poden ser declarades de dues maneres: Classes derivades de la classe Thread (definida dins java.lang) Classes que implementen la interfície Runnable (definida dins java.lang) Classes derivades de la classe Thread La classe Thread subministra una gran quantitat de métodes. D'entre tots n'hi ha dos especialment destacats per la seva importàcia. mètode run(): aquest mètode s'ha de sobrecarregar a la class derivada, ha de contenir el codi 'principal' d'execució thread. Aquest mètode no ha de ser invocat directament. mètode start(): aquest mètode ha de ser invocat per tal de iniciar l'execució del thread. Aquest mtode invocara la seva vegada el mtode run() del thread. A partir del moment en que això passa hi haurà dos 'processos' executant- se a la Màquina Virtual Java. Un exemple d'una classe derivada seria: class FilExecucio extends Thread { // Definició atributs de la classe // Definició mètodes de la classe public void run() { // Codi 'principal' de la classe (i per tant del thread) } // més coses } class Principal { // Declaracions i mètodes de la classe public static void main() { FilExecucio fil = new FilExecucio(); fil.start(); // a partir d'ara hi ha dos threads // més coses } } L'execució de threads està lligada a l'excepció InterruptedException. try { // instruccions sensibles } catch(InterruptedException exc) { // instruccions de gestió de l'excepció } Classes que implementen la interfície Runnable La interfície Runnable també conté una gran quantitat de mètodes útils. D'entre tots cal destacar el mètode abstracte run() la

Upload: alexander-nolasco

Post on 07-Dec-2015

216 views

Category:

Documents


3 download

DESCRIPTION

uib

TRANSCRIPT

Page 1: Introducció a La Concurrència Amb El Llenguatge Java

28/04/14 08:55Introducció a la Concurrència amb el llenguatge Java

Pàgina 1 de 3https://ce.uib.es/estudis1213/file.php/739/Documentacio/Introduccio_JavaPC.html

Introducció a la Concurrència amb el llenguatge Java

El llenguatge de Programació Java està dissenyat per poder fer ús de més d'un trhead d'execució. Per tant éspossible dissenyar un programa concurrent utilitzant Java.

La primera cosa a tenir en compte a l'hora d'escollir un llenguatge de programació és determinar quines funcionalitats ofereix.

Declaració de processos en Java

En java els processos es defineixen com objectes de classes que poden ser declarades de dues maneres:

Classes derivades de la classe Thread (definida dins java.lang)Classes que implementen la interfície Runnable (definida dins java.lang)

Classes derivades de la classe Thread

La classe Thread subministra una gran quantitat de métodes. D'entre tots n'hi ha dos especialment destacats per la sevaimportàcia.

mètode run(): aquest mètode s'ha de sobrecarregar a la class derivada, ha de contenir el codi 'principal' d'execucióthread. Aquest mètode no ha de ser invocat directament.mètode start(): aquest mètode ha de ser invocat per tal de iniciar l'execució del thread. Aquest m�tode invocar� ala seva vegada el m�tode run() del thread. A partir del moment en que això passa hi haurà dos 'processos' executant-se a la Màquina Virtual Java.

Un exemple d'una classe derivada seria:

class FilExecucio extends Thread { // Definició atributs de la classe // Definició mètodes de la classe public void run() { // Codi 'principal' de la classe (i per tant delthread) } // més coses}

class Principal { // Declaracions i mètodes de la classe

public static void main() { FilExecucio fil = new FilExecucio(); fil.start(); // a partir d'ara hi ha dos threads // més coses }}

L'execució de threads està lligada a l'excepció InterruptedException.

try { // instruccions sensibles}catch(InterruptedException exc) { // instruccions de gestió de l'excepció}

Classes que implementen la interfície Runnable

La interfície Runnable també conté una gran quantitat de mètodes útils. D'entre tots cal destacar el mètode abstracte run() la

Page 2: Introducció a La Concurrència Amb El Llenguatge Java

28/04/14 08:55Introducció a la Concurrència amb el llenguatge Java

Pàgina 2 de 3https://ce.uib.es/estudis1213/file.php/739/Documentacio/Introduccio_JavaPC.html

classe que es defineixi haur� d'implementar aquest m�tode per tal de poder funcionar correctament

Un exemple d'una classe derivada seria:

class SubPrograma implements Runnable { // Definició atributs de la classe // Definició mètodes de la classe public void run() { // Codi 'principal' de la classe (i per tant delthread) // És una sobrecàrrega del mètode abstracte run() de // Runnable } // més coses}

class Principal { // Declaracions i mètodes de la classe // dins algún mètode de la classe: public static void main() { Runnable fil = new SubPrograma(); Thread thr = new Thread(fil); thr.start(); // a partir d'ara hi ha dos threads // més coses }}

Exclusi� M�tua

En java existeix una forma senzilla d'implementar l'exclusió mútua sobre mètodes o blocs de codi. El modificador de mètodesinchronized garanteix que l'accés a un mètode o bloc serà exclusiu.

public synchronized void prova () { // instruccions sensibles}

Object lock = new Object();

synchronized (lock) { // instruccions sensibles}

Espera no activa

Els mecanismes de Java per forçar una espera són una espera incondicional amb sleep(<temps>) (m�tode est�tic de laclasse Thread) i wait()/notify()/notifyAll(), disponibles a través de java.lang.Object.

Proc�s que es bloqueja Proc�s que desbloqueja aaltres

// Aix� �s com� als dos processosObject lock = new Object();

synchronized (lock) { try {

synchronized (lock) { // el procés que executaaixó desbloqueja // a un dels processos que

Page 3: Introducció a La Concurrència Amb El Llenguatge Java

28/04/14 08:55Introducció a la Concurrència amb el llenguatge Java

Pàgina 3 de 3https://ce.uib.es/estudis1213/file.php/739/Documentacio/Introduccio_JavaPC.html

// el procés que executaaixó es bloqueja lock.wait(); } catch(InterruptedExceptionexc) { // instruccions degestió // de l'excepció }}

executen wait lock.notify(); }}

synchronized (lock) { // el procés que executaaixó desbloqueja // a tots els processosque executen wait lock.notifyAll(); }}