SlideShare ist ein Scribd-Unternehmen logo
1 von 28
Downloaden Sie, um offline zu lesen
PROGRAMACIÓ
 CONCURRENT


       Recursos per la
         concurrència
PER QUÈ ÉS NECESSÀRIA LA
    PROGRAMACIÓ CONCURRENT?
(1) Per la utilització completa del processador




(2) Paral·lelisme entre la
CPU i els dispositius d’E/S
PER QUÈ ÉS NECESSÀRIA LA
    PROGRAMACIÓ CONCURRENT?

(3) Per poder expressar el
paral·lelisme     potencial  que
existeix per fer que més d’un
ordinador es pugui utilitzar per
resoldre el problema.

Per exemple, per trobar la sortida
a un laberint.
PER QUÈ ÉS NECESSÀRIA LA
PROGRAMACIÓ CONCURRENT?
PLATAFORMA D’EXECUCIÓ
     CONCURRENT
PROGRAMES CONCURRENTS I
         PROCESSOS
Un programa concurrent es concep com un CONJUNT
 DE THREADS o FILS DE CONTROL.
Cada THREAD executa una única activitat seqüencial.
Cada THREAD s’executa en el seu propi processador
 virtual executant independentment accions d’acord
 amb l’activitat que tingui associada .
Els THREADs concurrents intercanvien entre ells
 missatges amb informació i missatges de sincronisme.
ASPECTES DELS PROCESSOS
Cada entorn de programació concurrent necessita
 establir algunes característiques sobre els seus
 processos:
   Naturalesa dels processos.
   Jerarquia dels processos.
   Mecanismes de inicialització.
   Mecanismes de finalització.
   Formes de declaració.
NATURALESA DELS PROCESSOS
Els processos poden ser:
    Estàtics: Són instanciats al començament del programa. El
     programador es declara explícitament.
    Dinàmics: Són creats durant l’execució del programa, en
     funció de les dades.
En funció dels processos que poden existir en un
 sistema es classifiquen com:
    Sistema tancat: S’ha de tenir un coneixement en temps
     disseny (estàtic) sobre els processos que construeixen en el
     sistema i la seva activitat.
    Sistema obert: El número de processos que constitueixen el
     sistema varia en el temps de forma que no es pot predir
     (fase de disseny), per exemple, perquè crea dinàmicament
     processos.
JERARQUIA DELS PROCESSOS
Els processos d’un programa es poden organitzar en:
    Estructura plana: Tots els processos són equivalents.
     Evolucionen i finalitzen independentment (processos
     UNIX).



    Estructura jerarquitzada: Entre els processos existeixen
     unes relaciones de dependència amb estructura d’arbre.
     Un procés no finalitza fins que els processos que en
     depenen no finalitzen.
INCIALITZACIÓ DELS PROCESSOS
Inicialitzar un procés és transferir-li, després de la
 seva creació, la informació que requereix per
 caracteritzar-lo individualment.
Existeixen diferents categories:

    A UNIX, cada procés és inicialment una rèplica del seu pare.
    A JAVA, en la creació s’estableixen uns paràmetres de
     incialització.
    Després de la creació, el fill comunica amb el seu pare i rep
     la informació de incialització.
FINALITZACIÓ DELS PROCESSOS
Existeixen múltiples formes de finalització d’un procés:
    Quan la línia de flux de control assoleix el final (amb èxit).
    Quan es produeix una excepció no atesa (amb fallida).
    Quan un procés executa una sentència “self terminate” (amb
     fallida).
    Quan el procés és avortat per un altre procés (amb fallida).
    Quan es dóna una finalització coordinada “terminate” (amb
     èxit).
    O bé, mai..
DECLARACIÓ DE PROCESSOS
           CONCURRENTS
Declaració per sentències estructurades
       cobegin
                    procés_1, procés_2, .., procés_n
       coend
Declaració com a components de bloc
       procedure Pare;
                     process procés_1, begin .... end;
                     process procés_2, begin .... end;
       begin ... End;
Bifurcació (fork)
       ......
       {if (fork()==0)
                     { ... } // Solament s’executa en el procés fill
       else
                     { ... } // S’executa solament en el procés pare
       }
Invocació no estructurada
ESTATS D’UN PROCÉS
ESTATS D’UN PROCÉS EN UN ENTORN
          MULTIPROCÉS
Diagrama bàsic d’estats d’un procés en temps real
CLASSES RELACIONADES AMB ELS FILS

 El llenguatge de programació Java proporciona suport
  pels fils (un fil és un únic flux d’execució dins d’un
  procés) mitjançant una interfície i un conjunt de
  classes.
 La interfície de Java i les classes que inclouen
  funcionalitat:
   Threads
   Runnable
   Object Thread
CLASSES RELACIONADES AMB ELS FILS
             Thread
 És la classe responsable de produir fils funcionals per
  altres classes.

 Per afegir la funcionalitat de fil a una classe, aquesta
  es deriva de Thread i s’ignora el mètode run.

 La classe Thread també defineix els mètodes start i
  stop.
CLASSES RELACIONADES AMB ELS FILS
            Runnable
 Java no suporta l’herència múltiple de forma directa.

 Aquesta interfície proporciona la capacitat d’afegir la
  funcionalitat d’un fil a una classe implementant la
  interfície.
CLASSES RELACIONADES AMB ELS FILS
              Object
 No es tracta d’una classe de suport als fils.

 La classe Object proporciona mètodes com wait,
  notify i notifyAll.
CREACIÓ DEL FILS
 A Java, la creació de nous fils és molt més ràpida que
  la creació de nous processos.

 A Java, en el procés de creació de fils, hi ha dos
  mecanismes que ens permetran portar-ho a terme:
   Estenent la classe Thread.
   Implementant la interfície Runnable.

   En ambdós casos, s’ha de definir un
              mètode run.
CREACIÓ DEL FILS
                      La classe Thread
class classeConcurrent extends Thread {
            // .. Mètodes                  Aquesta és la tasca que serà
            // .. Atributs                 CONCURRENT
       public void run () {
            // .. Sentències
            // .. Sentències


    class ElMeuPrograma {
           public static void main (String [] args) {
                       classeConcurrent tasca1, tasca2;
                       tasca1=new classeConcurrent ();       Declaració i creació
                       tasca2=new classeConcurrent ();       d’objectes (NORMAL)
                       // .. Més sentències
                       tasca1.start();
                                                       Iniciar tasca1 concurrentment
                       tasca2.start();
                       // .. Més sentències            amb main (). Invocar a
                                                    tasca1.run() i tornar
                                                    immediatament.
CREACIÓ DEL FILS
    La classe Thread - Conclusions
 Un objecte concurrent pertany a una classe que estén
  Thread.

 S’ha de tornar a definir el mètode run () que
  especifica la tasca concurrent.

 L’execució de la tasca concurrent es realitza
  mitjançant el mètode start () (heretat del Thread)
CREACIÓ DEL FILS
      La classe Thread – Exemple: Fil
class Fil extends Thread {                        La classe de la que els objectes
             public fil (String str) {            han de ser concurrents
                 super (str)           // invoquem directament al constructor
             }

      public void run () { La tasca que serà concurrent
          for (int i = 0; i <10; i++) {
                System.out.println (i+” “+getName());
          try {
                sleep ((long) (Math.random() *1000); Atura l’execució del fil
                } catch (InterruptedExecution e) {}   (“dorm”)
          }
               System.out.println (“Fi “+getName ());
               }
           }
CREACIÓ DEL FILS
     La classe Thread – Exemple: Test
public class VarisFils {
                                                         Pas 1: Creo de la classe que
                                                         llençarà els fils
            public static void main (String [] args) {
                fil u, dos;
            //s’intstancia el Thread
                 u=new fil (“Hobitton”);                 Pas 2: Invoco a l’operador
                 dos=new fil (“Mordor”);                 new per crear els fils
            //Inicia el que tingui el seu mètode run()
                 u.start();
                                                         Pas 3: Invoco al mètode start ()
                 dos.start();
                                                         de cada fil. Aquest mètode
            System.out.println (“main no fa res”);       arrenca el fil e invoca el mètode
            }                                            run().
     }
CREACIÓ DEL FILS
             La interfície runnable
 Implementar la interfície Runnable és un altre
  mètode per construir fils.

 Presenta algunes variacions: Principalment, en el
  mètode main.

 Per incialitzar un objecte derivat d’una classe que
  implementa la interfície runnable hem de declarar
  que es crearà un nou fil i que aquest s’ha
  d’inicialitzar amb el mètode start().
CREACIÓ DEL FILS
              Thread vs. Runnable
  Si tots dos mètodes fan el mateix, quan haig
d’heretat de Thread i quan haig de implementar
                  Runnable?
Si la classe ha de ser derivada d’una altre classe (per exemple,
     la classe Applet), s’utilitza el mètode runnable. En cas
       contrari, senzillament, s’hereta de la classe Thread.
CREACIÓ DEL FILS
                  Thread vs. Runnable
    A Java no hi ha herència múltiple: O heretes de
 Thread o heretes d’Applet o de qualsevol altre classe.

    class rellotge extends Applet extends Thread { }

class rellotge extends Applet implements Runnable { }

• Puc heretar d’Applet
• Puc implementar la funcionalitat dels fils
CREACIÓ DEL FILS
  La interfície Runnable: Implementació
 Consisteix en declarar una classe que implementi
  Runnable i sobreescriure el mètode run()
        public abstract void run()
 Dins de run() incloem el codi a executar pel nou fil.
 A continuació, crearem un objecte de la classe Thread
  dins d’aquesta classe.
    Al constructor de Thread li passem com argument l’objecte de la nova
     classe (instància d’una classe que implementi Runnable):
        Thread(Runnable objecteFil, String nomFil)
 Per últim, cridem al métode start() amb l’objecte
  anterior.
        Synchronized void start()
CICLE DE VIDA D’UN FIL
Transició entre estats d’un thread

Weitere ähnliche Inhalte

Andere mochten auch

Programacion anual de ept 1156 jsbl- 2015 ccesa
Programacion anual de ept 1156 jsbl- 2015 ccesaProgramacion anual de ept 1156 jsbl- 2015 ccesa
Programacion anual de ept 1156 jsbl- 2015 ccesaDemetrio Ccesa Rayme
 
Sesion de aprendizaje educacion para el trabajo
Sesion de aprendizaje educacion para el trabajoSesion de aprendizaje educacion para el trabajo
Sesion de aprendizaje educacion para el trabajoBasilio Gervacio
 
Planificación clase a clase
Planificación clase a clasePlanificación clase a clase
Planificación clase a claseDidactica Ludica
 
Formato de planificación docente
Formato de planificación docenteFormato de planificación docente
Formato de planificación docentenathalia
 

Andere mochten auch (6)

Programación Curricular de Aula
Programación Curricular de AulaProgramación Curricular de Aula
Programación Curricular de Aula
 
Programacion anual de ept 1156 jsbl- 2015 ccesa
Programacion anual de ept 1156 jsbl- 2015 ccesaProgramacion anual de ept 1156 jsbl- 2015 ccesa
Programacion anual de ept 1156 jsbl- 2015 ccesa
 
Sesion de aprendizaje educacion para el trabajo
Sesion de aprendizaje educacion para el trabajoSesion de aprendizaje educacion para el trabajo
Sesion de aprendizaje educacion para el trabajo
 
Planificación clase a clase
Planificación clase a clasePlanificación clase a clase
Planificación clase a clase
 
Formato de planificación docente
Formato de planificación docenteFormato de planificación docente
Formato de planificación docente
 
Plan clase diario
Plan clase diarioPlan clase diario
Plan clase diario
 

Ähnlich wie 1213 Threads [2] Programació concurrent

Aplicacions Interactives multiplataforma_pac3
Aplicacions Interactives multiplataforma_pac3Aplicacions Interactives multiplataforma_pac3
Aplicacions Interactives multiplataforma_pac3Marcos Baldovi
 
Presentacio Ubuntu
Presentacio UbuntuPresentacio Ubuntu
Presentacio Ubuntuavg.aux
 
Proves de Software (en Java amb JUnit)
Proves de Software (en Java amb JUnit)Proves de Software (en Java amb JUnit)
Proves de Software (en Java amb JUnit)Juan-Manuel Gimeno
 

Ähnlich wie 1213 Threads [2] Programació concurrent (8)

Sync toasync
Sync toasyncSync toasync
Sync toasync
 
Tests nunit nunitforms
Tests nunit nunitformsTests nunit nunitforms
Tests nunit nunitforms
 
Aplicacions Interactives multiplataforma_pac3
Aplicacions Interactives multiplataforma_pac3Aplicacions Interactives multiplataforma_pac3
Aplicacions Interactives multiplataforma_pac3
 
Presentacio Ubuntu
Presentacio UbuntuPresentacio Ubuntu
Presentacio Ubuntu
 
Metasploit framework mini how-to
Metasploit framework mini how-toMetasploit framework mini how-to
Metasploit framework mini how-to
 
Presentació del protocol TCP/IP
Presentació del protocol TCP/IPPresentació del protocol TCP/IP
Presentació del protocol TCP/IP
 
PW_pac1
PW_pac1PW_pac1
PW_pac1
 
Proves de Software (en Java amb JUnit)
Proves de Software (en Java amb JUnit)Proves de Software (en Java amb JUnit)
Proves de Software (en Java amb JUnit)
 

Mehr von Oriol Torres

Economia col·laborativa, turisme col·laboratiu i KangApp
Economia col·laborativa, turisme col·laboratiu i KangAppEconomia col·laborativa, turisme col·laboratiu i KangApp
Economia col·laborativa, turisme col·laboratiu i KangAppOriol Torres
 
Presentation of Treat or Treat
Presentation of Treat or TreatPresentation of Treat or Treat
Presentation of Treat or TreatOriol Torres
 
Presentación pública Treat or Treat
Presentación pública Treat or TreatPresentación pública Treat or Treat
Presentación pública Treat or TreatOriol Torres
 
1213 Threads [4] Sincronització
1213 Threads [4] Sincronització1213 Threads [4] Sincronització
1213 Threads [4] SincronitzacióOriol Torres
 
1213 Threads [5] Accés a fitxers
1213 Threads [5] Accés a fitxers1213 Threads [5] Accés a fitxers
1213 Threads [5] Accés a fitxersOriol Torres
 
1213 serveis [5] Correu electronic i pagines web
1213 serveis [5] Correu electronic i pagines web1213 serveis [5] Correu electronic i pagines web
1213 serveis [5] Correu electronic i pagines webOriol Torres
 
1213 Sockets [4] Servidors i fils
1213 Sockets [4] Servidors i fils1213 Sockets [4] Servidors i fils
1213 Sockets [4] Servidors i filsOriol Torres
 
1213 Sockets [1] Introducció
1213 Sockets [1] Introducció1213 Sockets [1] Introducció
1213 Sockets [1] IntroduccióOriol Torres
 
1213 Sockets [2] Arquitectura client - servidor
1213 Sockets [2] Arquitectura client - servidor1213 Sockets [2] Arquitectura client - servidor
1213 Sockets [2] Arquitectura client - servidorOriol Torres
 
1213 Sockets [3] Programació
1213 Sockets [3] Programació1213 Sockets [3] Programació
1213 Sockets [3] ProgramacióOriol Torres
 
1213 Threads [1] Programació concurrent, processos i fils
1213 Threads [1] Programació concurrent, processos i fils1213 Threads [1] Programació concurrent, processos i fils
1213 Threads [1] Programació concurrent, processos i filsOriol Torres
 
Appetite apps stats market
Appetite apps stats marketAppetite apps stats market
Appetite apps stats marketOriol Torres
 

Mehr von Oriol Torres (12)

Economia col·laborativa, turisme col·laboratiu i KangApp
Economia col·laborativa, turisme col·laboratiu i KangAppEconomia col·laborativa, turisme col·laboratiu i KangApp
Economia col·laborativa, turisme col·laboratiu i KangApp
 
Presentation of Treat or Treat
Presentation of Treat or TreatPresentation of Treat or Treat
Presentation of Treat or Treat
 
Presentación pública Treat or Treat
Presentación pública Treat or TreatPresentación pública Treat or Treat
Presentación pública Treat or Treat
 
1213 Threads [4] Sincronització
1213 Threads [4] Sincronització1213 Threads [4] Sincronització
1213 Threads [4] Sincronització
 
1213 Threads [5] Accés a fitxers
1213 Threads [5] Accés a fitxers1213 Threads [5] Accés a fitxers
1213 Threads [5] Accés a fitxers
 
1213 serveis [5] Correu electronic i pagines web
1213 serveis [5] Correu electronic i pagines web1213 serveis [5] Correu electronic i pagines web
1213 serveis [5] Correu electronic i pagines web
 
1213 Sockets [4] Servidors i fils
1213 Sockets [4] Servidors i fils1213 Sockets [4] Servidors i fils
1213 Sockets [4] Servidors i fils
 
1213 Sockets [1] Introducció
1213 Sockets [1] Introducció1213 Sockets [1] Introducció
1213 Sockets [1] Introducció
 
1213 Sockets [2] Arquitectura client - servidor
1213 Sockets [2] Arquitectura client - servidor1213 Sockets [2] Arquitectura client - servidor
1213 Sockets [2] Arquitectura client - servidor
 
1213 Sockets [3] Programació
1213 Sockets [3] Programació1213 Sockets [3] Programació
1213 Sockets [3] Programació
 
1213 Threads [1] Programació concurrent, processos i fils
1213 Threads [1] Programació concurrent, processos i fils1213 Threads [1] Programació concurrent, processos i fils
1213 Threads [1] Programació concurrent, processos i fils
 
Appetite apps stats market
Appetite apps stats marketAppetite apps stats market
Appetite apps stats market
 

1213 Threads [2] Programació concurrent

  • 1. PROGRAMACIÓ CONCURRENT Recursos per la concurrència
  • 2. PER QUÈ ÉS NECESSÀRIA LA PROGRAMACIÓ CONCURRENT? (1) Per la utilització completa del processador (2) Paral·lelisme entre la CPU i els dispositius d’E/S
  • 3. PER QUÈ ÉS NECESSÀRIA LA PROGRAMACIÓ CONCURRENT? (3) Per poder expressar el paral·lelisme potencial que existeix per fer que més d’un ordinador es pugui utilitzar per resoldre el problema. Per exemple, per trobar la sortida a un laberint.
  • 4. PER QUÈ ÉS NECESSÀRIA LA PROGRAMACIÓ CONCURRENT?
  • 6. PROGRAMES CONCURRENTS I PROCESSOS Un programa concurrent es concep com un CONJUNT DE THREADS o FILS DE CONTROL. Cada THREAD executa una única activitat seqüencial. Cada THREAD s’executa en el seu propi processador virtual executant independentment accions d’acord amb l’activitat que tingui associada . Els THREADs concurrents intercanvien entre ells missatges amb informació i missatges de sincronisme.
  • 7. ASPECTES DELS PROCESSOS Cada entorn de programació concurrent necessita establir algunes característiques sobre els seus processos:  Naturalesa dels processos.  Jerarquia dels processos.  Mecanismes de inicialització.  Mecanismes de finalització.  Formes de declaració.
  • 8. NATURALESA DELS PROCESSOS Els processos poden ser:  Estàtics: Són instanciats al començament del programa. El programador es declara explícitament.  Dinàmics: Són creats durant l’execució del programa, en funció de les dades. En funció dels processos que poden existir en un sistema es classifiquen com:  Sistema tancat: S’ha de tenir un coneixement en temps disseny (estàtic) sobre els processos que construeixen en el sistema i la seva activitat.  Sistema obert: El número de processos que constitueixen el sistema varia en el temps de forma que no es pot predir (fase de disseny), per exemple, perquè crea dinàmicament processos.
  • 9. JERARQUIA DELS PROCESSOS Els processos d’un programa es poden organitzar en:  Estructura plana: Tots els processos són equivalents. Evolucionen i finalitzen independentment (processos UNIX).  Estructura jerarquitzada: Entre els processos existeixen unes relaciones de dependència amb estructura d’arbre. Un procés no finalitza fins que els processos que en depenen no finalitzen.
  • 10. INCIALITZACIÓ DELS PROCESSOS Inicialitzar un procés és transferir-li, després de la seva creació, la informació que requereix per caracteritzar-lo individualment. Existeixen diferents categories:  A UNIX, cada procés és inicialment una rèplica del seu pare.  A JAVA, en la creació s’estableixen uns paràmetres de incialització.  Després de la creació, el fill comunica amb el seu pare i rep la informació de incialització.
  • 11. FINALITZACIÓ DELS PROCESSOS Existeixen múltiples formes de finalització d’un procés:  Quan la línia de flux de control assoleix el final (amb èxit).  Quan es produeix una excepció no atesa (amb fallida).  Quan un procés executa una sentència “self terminate” (amb fallida).  Quan el procés és avortat per un altre procés (amb fallida).  Quan es dóna una finalització coordinada “terminate” (amb èxit).  O bé, mai..
  • 12. DECLARACIÓ DE PROCESSOS CONCURRENTS Declaració per sentències estructurades cobegin procés_1, procés_2, .., procés_n coend Declaració com a components de bloc procedure Pare; process procés_1, begin .... end; process procés_2, begin .... end; begin ... End; Bifurcació (fork) ...... {if (fork()==0) { ... } // Solament s’executa en el procés fill else { ... } // S’executa solament en el procés pare } Invocació no estructurada
  • 14. ESTATS D’UN PROCÉS EN UN ENTORN MULTIPROCÉS Diagrama bàsic d’estats d’un procés en temps real
  • 15. CLASSES RELACIONADES AMB ELS FILS  El llenguatge de programació Java proporciona suport pels fils (un fil és un únic flux d’execució dins d’un procés) mitjançant una interfície i un conjunt de classes.  La interfície de Java i les classes que inclouen funcionalitat:  Threads  Runnable  Object Thread
  • 16. CLASSES RELACIONADES AMB ELS FILS Thread  És la classe responsable de produir fils funcionals per altres classes.  Per afegir la funcionalitat de fil a una classe, aquesta es deriva de Thread i s’ignora el mètode run.  La classe Thread també defineix els mètodes start i stop.
  • 17. CLASSES RELACIONADES AMB ELS FILS Runnable  Java no suporta l’herència múltiple de forma directa.  Aquesta interfície proporciona la capacitat d’afegir la funcionalitat d’un fil a una classe implementant la interfície.
  • 18. CLASSES RELACIONADES AMB ELS FILS Object  No es tracta d’una classe de suport als fils.  La classe Object proporciona mètodes com wait, notify i notifyAll.
  • 19. CREACIÓ DEL FILS  A Java, la creació de nous fils és molt més ràpida que la creació de nous processos.  A Java, en el procés de creació de fils, hi ha dos mecanismes que ens permetran portar-ho a terme:  Estenent la classe Thread.  Implementant la interfície Runnable. En ambdós casos, s’ha de definir un mètode run.
  • 20. CREACIÓ DEL FILS La classe Thread class classeConcurrent extends Thread { // .. Mètodes Aquesta és la tasca que serà // .. Atributs CONCURRENT public void run () { // .. Sentències // .. Sentències class ElMeuPrograma { public static void main (String [] args) { classeConcurrent tasca1, tasca2; tasca1=new classeConcurrent (); Declaració i creació tasca2=new classeConcurrent (); d’objectes (NORMAL) // .. Més sentències tasca1.start(); Iniciar tasca1 concurrentment tasca2.start(); // .. Més sentències amb main (). Invocar a tasca1.run() i tornar immediatament.
  • 21. CREACIÓ DEL FILS La classe Thread - Conclusions  Un objecte concurrent pertany a una classe que estén Thread.  S’ha de tornar a definir el mètode run () que especifica la tasca concurrent.  L’execució de la tasca concurrent es realitza mitjançant el mètode start () (heretat del Thread)
  • 22. CREACIÓ DEL FILS La classe Thread – Exemple: Fil class Fil extends Thread { La classe de la que els objectes public fil (String str) { han de ser concurrents super (str) // invoquem directament al constructor } public void run () { La tasca que serà concurrent for (int i = 0; i <10; i++) { System.out.println (i+” “+getName()); try { sleep ((long) (Math.random() *1000); Atura l’execució del fil } catch (InterruptedExecution e) {} (“dorm”) } System.out.println (“Fi “+getName ()); } }
  • 23. CREACIÓ DEL FILS La classe Thread – Exemple: Test public class VarisFils { Pas 1: Creo de la classe que llençarà els fils public static void main (String [] args) { fil u, dos; //s’intstancia el Thread u=new fil (“Hobitton”); Pas 2: Invoco a l’operador dos=new fil (“Mordor”); new per crear els fils //Inicia el que tingui el seu mètode run() u.start(); Pas 3: Invoco al mètode start () dos.start(); de cada fil. Aquest mètode System.out.println (“main no fa res”); arrenca el fil e invoca el mètode } run(). }
  • 24. CREACIÓ DEL FILS La interfície runnable  Implementar la interfície Runnable és un altre mètode per construir fils.  Presenta algunes variacions: Principalment, en el mètode main.  Per incialitzar un objecte derivat d’una classe que implementa la interfície runnable hem de declarar que es crearà un nou fil i que aquest s’ha d’inicialitzar amb el mètode start().
  • 25. CREACIÓ DEL FILS Thread vs. Runnable Si tots dos mètodes fan el mateix, quan haig d’heretat de Thread i quan haig de implementar Runnable? Si la classe ha de ser derivada d’una altre classe (per exemple, la classe Applet), s’utilitza el mètode runnable. En cas contrari, senzillament, s’hereta de la classe Thread.
  • 26. CREACIÓ DEL FILS Thread vs. Runnable A Java no hi ha herència múltiple: O heretes de Thread o heretes d’Applet o de qualsevol altre classe. class rellotge extends Applet extends Thread { } class rellotge extends Applet implements Runnable { } • Puc heretar d’Applet • Puc implementar la funcionalitat dels fils
  • 27. CREACIÓ DEL FILS La interfície Runnable: Implementació  Consisteix en declarar una classe que implementi Runnable i sobreescriure el mètode run() public abstract void run()  Dins de run() incloem el codi a executar pel nou fil.  A continuació, crearem un objecte de la classe Thread dins d’aquesta classe.  Al constructor de Thread li passem com argument l’objecte de la nova classe (instància d’una classe que implementi Runnable): Thread(Runnable objecteFil, String nomFil)  Per últim, cridem al métode start() amb l’objecte anterior. Synchronized void start()
  • 28. CICLE DE VIDA D’UN FIL Transició entre estats d’un thread