SlideShare une entreprise Scribd logo
1  sur  21
Lezione 2: I thread
      Corso di Programmazione in Rete
     Laurea Magistrale in Ing. Informatica
       Università degli Studi di Salerno



1
Outline
    ✦ Introduzione ai thread

    ✦ I thread in Java

    ✦ La sincronizzazione




2
Introduzione ai thread
    ✦ Sequenza statica = sequenza delle
      istruzioni nel testo del programma
    ✦ Sequenza dinamica = sequenza in cui le
      istruzioni sono eseguite durante una
      particolare esecuzione del programma
    ✦ Tradizionalmente, ad ogni esecuzione è
      associata un’unica sequenza statica detta
      anche flusso di esecuzione o thread of
      execution

3
Multi-threading
    ✦ Nei moderni sistemi operativi un
      programma può attivare più flussi di
      esecuzione (thread) che procedono
      simultaneamente
    ✦ I programmi che sfruttano questa
      possibilità sono detti multi-threaded
    ✦ Nota:
     •   Multitasking = più programmi attivi
         contemporaneamente
     •   Multithreading = più thread attivi nello stesso
         programma
4
Multi-threading
    ✦ In un programma a singolo thread:

                                            Operazione A {
                                                   istruzione 1
                                                   istruzione 2
              ...                                  ...
              OperazioneA();                }
              OperazioneB();
              ...
                                            Operazione B {
                                                   istruzione 1
        L'operazione A deve essere                 istruzione 2
        completata prima che il programma          ...
        possa cominciare l'operazione B     }




5
Multi-threading
    ✦ In un programma multi-threaded

                                               Operazione A {
          ...                                         istruzione 1
          nuovo thread {                              istruzione 2
            OperazioneA();                            ...
          }                                    }
          OperazioneB();
          ...
                                               Operazione B {
                                                      istruzione 1
       L’operazione A è eseguita in un                istruzione 2
       thread separato da quello                      ...
       principale; B comincia prima che A      }
       sia terminata
       (A e B sono eseguite “in parallelo”)‫‏‬




6
Multi-threading
    ✦ Se il computer ha più processori:
      esecuzione parallela dei thread
    ✦ Se il computer ha un solo processore (o
      un numero di processori inferiore al
      numero di thread): esecuzione
      concorrente (time sharing)
            esecuzione parallela   operazione A
                                     operazione B




            esecuzione                    operazione A
            concorrente
                                            operazione B


                                                         tempo
7
Vantaggi

    ✦ Sfruttare il parallelismo quando
      disponibile
    ✦ Operazioni lunghe in “background” senza
      bloccare il programma
    ✦ Alcuni programmi devono comunque
      gestire più richieste contemporaneamente
      (es. web server)



8
Svantaggi
    ✦ Ogni thread richiede memoria per lo stack
      e altre risorse
    ✦ Il passaggio del processore da un thread
      all’altro (context switch) non è
      un’operazione istantanea


      Quindi: non è conveniente avere un
      numero molto elevato di thread


9
Sincronizzazione
     ✦ I thread di un programma hanno tutti
       accesso alle risorse del programma e
       possono modificarne lo stato
     ✦ La modifica dello stato di una struttura
       dati simultaneamente da parte di più
       thread può portare la struttura dati in uno
       stato inconsistente
     ✦ È necessario un coordinamento tra i
       thread che devono accedere a una stessa
       struttura dati (sincronizzazione)

10
Sincronizzazione
     ✦ Esempio: supponiamo di avere una
       variabile condivisa SALDO che contenga il
       saldo di un conto corrente

           PRELIEVO:          VERSAMENTO:
                x ← SALDO          y ← SALDO
                x ← x-50           y ← y+75
                SALDO ← x          SALDO ← y


     ✦ Cosa succede se le due operazioni sono
       eseguite in due thread attivi
       simultaneamente?

11
I thread in Java
     ✦ In Java è possibile creare un nuovo
       thread usando la classe Thread
     ✦ Occorre associare il thread alle operazioni
       che deve svolgere
      •   Creazione di una sottoclasse di Thread
      •   Creazione di un oggetto che implementi
          l’interfaccia Runnable, da passare al costruttore di
          Thread
     ✦ Il thread deve essere avviato con il
       metodo start

12
Thread in Java
     ✦ Esempio
         public   class HelloThread extends Thread {
         	        public void run() {
         	        	      int i;
         		                for(i=0; i<100; i++)‫‏‬
         	        	      	      System.out.println("Hello, world");
                  }
         }
         public   class TestHello1 {
         	        public static void main(String[] args) {
         	        	      // Creazione e avvio di un nuovo thread
         	        	      Thread t=new HelloThread();
         	        	      t.start();
         	        	
         	        	      // Simultaneamente, nel thread del main...
         	        	      int i;
         		             for(i=0; i<100; i++)‫‏‬
         	        	      	      System.out.println("Salve, mondo");
         	        }
         }
13
Thread in Java
     ✦ Esempio
        public class HelloPrinter implements Runnable {
        	     public void run() {
        	     	     int i;
        		              for(i=0; i<100; i++)‫‏‬
        	     	     	     System.out.println("Hello, world");
        	     }
        }

        public   class TestHello2 {
        	        public static void main(String[] args) {
        	        	      // Creazione e avvio di un nuovo thread
        	        	      HelloPrinter hello=new HelloPrinter();
        	        	      Thread t=new Thread(hello);
        	        	      t.start();
        	        	
        	        	      // Simultaneamente, nel thread del main...
        	        	      int i;
        		              for(i=0; i<100; i++)‫‏‬
        	        	      	      System.out.println("Salve, mondo");
        	        }
        }
14
Daemon thread
     ✦ Un programma Java termina quando tutti
       i suoi thread sono terminati
     ✦ È possibile dichiarare un thread come “di
       servizio” (daemon thread) in modo che il
       programma termini quando sono rimasti
       attivi solo i thread di servizio
      •   A tale scopo si usa il metodo:
             void setDaemon(boolean isDaemon)
          della classe Thread prima di chiamare start()


15
Sincronizzazione in Java

     ✦ Ogni oggetto Java contiene una struttura
       dati detta mutex che consente di
       garantire che l’accesso all’oggetto venga
       effettuato da un solo thread per volta
       (“mutua esclusione”)
     ✦ Combinando l’uso del mutex con
       l’incapsulamento il programmatore può
       gestire il problema della sincronizzazione


16
Synchronized


     ✦ Il mutex di un oggetto si utilizza tramite il
       costrutto synchronized, la cui sintassi è:
             synchronized (obj) {
                              istruzione ...
               }




17
Synchronized
     ✦ Il thread che esegue synchronized
       “acquisisce” il mutex dell’oggetto indicato
       per tutta la durata del blocco di istruzioni
       specificato
     ✦ Un solo thread alla volta può acquisire un
       certo mutex
     ✦ Se un altro thread prova ad acquisire un
       mutex già impegnato da un altro thread,
       viene messo in attesa fino a quando
       l’altro thread non rilascia il mutex

18
Synchronized
     ✦ Esempio
           public class ContoCorrente {
           	 private double saldo;
           	
           	 public ContoCorrente(double saldoIniziale) {
           	 	 saldo=saldoIniziale;
           	 }
           	
           	 public double getSaldo() {
           	 	 synchronized (this) {
           	 	 	 return saldo;
           	 	 }
           	 }
           	
           	 public void versa(double x) {
           	 	 synchronized (this) {
           	 	 	 saldo+=x;
           	 	 }
           	 }
           }

19
Synchronized

     ✦ Spesso occorre rendere synchronized
       l’intero corpo di un metodo usando il
       mutex dell’oggetto corrente (this)
     ✦ Sintassi semplificata: premettere la
       parola chiave synchronized
       all’intestazione del metodo



20
Synchronized
     ✦ Esempio

           public class ContoCorrente {
           	 private double saldo;
           	
           	 public ContoCorrente(double saldoIniziale) {
           	 	 saldo=saldoIniziale;
           	 }
           	
           	 public synchronized double getSaldo() {
           	 	 	 	 return saldo;
           	 }
           	
           	 public synchronized void versa(double x) {
           	 	 	 saldo+=x;
           	 }
           }




21

Contenu connexe

Tendances

Cisco-Press-CCNP-and-CCIE-Enterprise-Core-ENCOR-350-401-Official-Cert-Guide.pdf
Cisco-Press-CCNP-and-CCIE-Enterprise-Core-ENCOR-350-401-Official-Cert-Guide.pdfCisco-Press-CCNP-and-CCIE-Enterprise-Core-ENCOR-350-401-Official-Cert-Guide.pdf
Cisco-Press-CCNP-and-CCIE-Enterprise-Core-ENCOR-350-401-Official-Cert-Guide.pdf
LeeRonald2
 

Tendances (20)

MikroTik & RouterOS
MikroTik & RouterOSMikroTik & RouterOS
MikroTik & RouterOS
 
E4 pt act_7_5_1
E4 pt act_7_5_1E4 pt act_7_5_1
E4 pt act_7_5_1
 
SDN OpenDaylight
SDN OpenDaylightSDN OpenDaylight
SDN OpenDaylight
 
EtherChannel
EtherChannelEtherChannel
EtherChannel
 
20 - IDNOG03 - Franki Lim (ARISTA) - Overlay Networking with VXLAN
20 - IDNOG03 - Franki Lim (ARISTA) - Overlay Networking with VXLAN20 - IDNOG03 - Franki Lim (ARISTA) - Overlay Networking with VXLAN
20 - IDNOG03 - Franki Lim (ARISTA) - Overlay Networking with VXLAN
 
Introduction to router
Introduction to routerIntroduction to router
Introduction to router
 
Mikrotik load balansing
Mikrotik load balansingMikrotik load balansing
Mikrotik load balansing
 
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
클라우드 환경을 위한 네트워크 가상화와 NSX(기초편)
 
Vlan
VlanVlan
Vlan
 
1000 Ccna Questions And Answers
1000 Ccna Questions And Answers1000 Ccna Questions And Answers
1000 Ccna Questions And Answers
 
Bidirectional Forwarding Detection (BFD)
Bidirectional Forwarding Detection (BFD) Bidirectional Forwarding Detection (BFD)
Bidirectional Forwarding Detection (BFD)
 
VPN - Virtual Private Network
VPN - Virtual Private NetworkVPN - Virtual Private Network
VPN - Virtual Private Network
 
BEEVA | Introducción a Docker
BEEVA | Introducción a DockerBEEVA | Introducción a Docker
BEEVA | Introducción a Docker
 
CCNA - Routing & Switching Commands
CCNA - Routing & Switching CommandsCCNA - Routing & Switching Commands
CCNA - Routing & Switching Commands
 
Cisco-Press-CCNP-and-CCIE-Enterprise-Core-ENCOR-350-401-Official-Cert-Guide.pdf
Cisco-Press-CCNP-and-CCIE-Enterprise-Core-ENCOR-350-401-Official-Cert-Guide.pdfCisco-Press-CCNP-and-CCIE-Enterprise-Core-ENCOR-350-401-Official-Cert-Guide.pdf
Cisco-Press-CCNP-and-CCIE-Enterprise-Core-ENCOR-350-401-Official-Cert-Guide.pdf
 
Introduction to OpenFlow
Introduction to OpenFlowIntroduction to OpenFlow
Introduction to OpenFlow
 
Creating a DMZ - pfSense Hangout January 2016
Creating a DMZ - pfSense Hangout January 2016Creating a DMZ - pfSense Hangout January 2016
Creating a DMZ - pfSense Hangout January 2016
 
Cisco nx os
Cisco nx os Cisco nx os
Cisco nx os
 
OpenStack DevStack Configuration localrc local.conf Tutorial
OpenStack DevStack Configuration localrc local.conf TutorialOpenStack DevStack Configuration localrc local.conf Tutorial
OpenStack DevStack Configuration localrc local.conf Tutorial
 
The Basic Introduction of Open vSwitch
The Basic Introduction of Open vSwitchThe Basic Introduction of Open vSwitch
The Basic Introduction of Open vSwitch
 

Similaire à Lezione 2: I thread

Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template method
Nelson Firmani
 

Similaire à Lezione 2: I thread (20)

Java lezione 8
Java lezione 8Java lezione 8
Java lezione 8
 
Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern Comportamentali
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern Comportamentali
 
Corso Java
Corso JavaCorso Java
Corso Java
 
Corso Java 1 - BASE
Corso Java 1 - BASECorso Java 1 - BASE
Corso Java 1 - BASE
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
[Objective-C] - Introduzione
[Objective-C] - Introduzione[Objective-C] - Introduzione
[Objective-C] - Introduzione
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
 
Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!
 
Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template method
 
Lezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e SubversionLezione 4: I tool Ant e Subversion
Lezione 4: I tool Ant e Subversion
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
 
Metodi asincroni in spring
Metodi asincroni in springMetodi asincroni in spring
Metodi asincroni in spring
 
Potenza e controllo con le Parallel Libraries (Raffaele Rialdi)
Potenza e controllo con le Parallel Libraries (Raffaele Rialdi)Potenza e controllo con le Parallel Libraries (Raffaele Rialdi)
Potenza e controllo con le Parallel Libraries (Raffaele Rialdi)
 
Concurrency
ConcurrencyConcurrency
Concurrency
 
2006 Py03 intermedio
2006 Py03 intermedio2006 Py03 intermedio
2006 Py03 intermedio
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
 
Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern Comportamentali
 

Plus de Andrea Della Corte

Plus de Andrea Della Corte (18)

Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern Strutturali
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern Creazionali
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme Programming
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
 
Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
 
Lezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLSLezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLS
 
Lezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in JavaLezione 11: Accesso ai RESTful Web Services in Java
Lezione 11: Accesso ai RESTful Web Services in Java
 
Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)Lezione 10: Web Service in Java (2)
Lezione 10: Web Service in Java (2)
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in Java
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web Service
 
Lezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSLLezione 7: Remote Method Invocation e SSL
Lezione 7: Remote Method Invocation e SSL
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method Invocation
 
Lezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in RESTLezione12: Autenticazione e gestione delle sessioni in REST
Lezione12: Autenticazione e gestione delle sessioni in REST
 
Lezione 1: I/O in Java
Lezione 1: I/O in JavaLezione 1: I/O in Java
Lezione 1: I/O in Java
 
Lezione 3: Connessioni TCP
Lezione 3: Connessioni TCPLezione 3: Connessioni TCP
Lezione 3: Connessioni TCP
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDP
 
Tutorial Matlab 2009
Tutorial Matlab 2009Tutorial Matlab 2009
Tutorial Matlab 2009
 
Introduzione ai CRM
Introduzione ai CRMIntroduzione ai CRM
Introduzione ai CRM
 

Dernier

Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
sasaselvatico
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
lorenzodemidio01
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
giorgiadeascaniis59
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
nico07fusco
 

Dernier (20)

discorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptxdiscorso generale sulla fisica e le discipline.pptx
discorso generale sulla fisica e le discipline.pptx
 
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptxAdducchio.Samuel-Steve_Jobs.ppppppppppptx
Adducchio.Samuel-Steve_Jobs.ppppppppppptx
 
Aristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptxAristotele, vita e opere e fisica...pptx
Aristotele, vita e opere e fisica...pptx
 
Scrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibileScrittura seo e scrittura accessibile
Scrittura seo e scrittura accessibile
 
TeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdfTeccarelliLorenzo-Mitodella.cavernaa.pdf
TeccarelliLorenzo-Mitodella.cavernaa.pdf
 
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptxProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
ProgettoDiEducazioneCivicaDefinitivo_Christian Tosone.pptx
 
descrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptxdescrizioni della antica civiltà dei sumeri.pptx
descrizioni della antica civiltà dei sumeri.pptx
 
Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................Oppressi_oppressori.pptx................
Oppressi_oppressori.pptx................
 
Tosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptxTosone Christian_Steve Jobsaaaaaaaa.pptx
Tosone Christian_Steve Jobsaaaaaaaa.pptx
 
Storia-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptxStoria-CarloMagno-TeccarelliLorenzo.pptx
Storia-CarloMagno-TeccarelliLorenzo.pptx
 
TeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docxTeccarelliLorenzo-i4stilidellapitturaromana.docx
TeccarelliLorenzo-i4stilidellapitturaromana.docx
 
Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.Vuoi girare il mondo? educazione civica.
Vuoi girare il mondo? educazione civica.
 
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
CHIẾN THẮNG KÌ THI TUYỂN SINH VÀO LỚP 10 THPT MÔN NGỮ VĂN - PHAN THẾ HOÀI (36...
 
Una breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opereUna breve introduzione ad Elsa Morante, vita e opere
Una breve introduzione ad Elsa Morante, vita e opere
 
Descrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptxDescrizione Piccolo teorema di Talete.pptx
Descrizione Piccolo teorema di Talete.pptx
 
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptxScienza Potere Puntoaaaaaaaaaaaaaaa.pptx
Scienza Potere Puntoaaaaaaaaaaaaaaa.pptx
 
case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....case passive_GiorgiaDeAscaniis.pptx.....
case passive_GiorgiaDeAscaniis.pptx.....
 
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptxTeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
TeccarelliLorenzo-PrimadiSteveJobselasuaconcorrenza.pptx
 
LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................LE ALGHE.pptx ..........................
LE ALGHE.pptx ..........................
 
Presentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informaticaPresentazione tre geni della tecnologia informatica
Presentazione tre geni della tecnologia informatica
 

Lezione 2: I thread

  • 1. Lezione 2: I thread Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1
  • 2. Outline ✦ Introduzione ai thread ✦ I thread in Java ✦ La sincronizzazione 2
  • 3. Introduzione ai thread ✦ Sequenza statica = sequenza delle istruzioni nel testo del programma ✦ Sequenza dinamica = sequenza in cui le istruzioni sono eseguite durante una particolare esecuzione del programma ✦ Tradizionalmente, ad ogni esecuzione è associata un’unica sequenza statica detta anche flusso di esecuzione o thread of execution 3
  • 4. Multi-threading ✦ Nei moderni sistemi operativi un programma può attivare più flussi di esecuzione (thread) che procedono simultaneamente ✦ I programmi che sfruttano questa possibilità sono detti multi-threaded ✦ Nota: • Multitasking = più programmi attivi contemporaneamente • Multithreading = più thread attivi nello stesso programma 4
  • 5. Multi-threading ✦ In un programma a singolo thread: Operazione A { istruzione 1 istruzione 2 ... ... OperazioneA(); } OperazioneB(); ... Operazione B { istruzione 1 L'operazione A deve essere istruzione 2 completata prima che il programma ... possa cominciare l'operazione B } 5
  • 6. Multi-threading ✦ In un programma multi-threaded Operazione A { ... istruzione 1 nuovo thread { istruzione 2 OperazioneA(); ... } } OperazioneB(); ... Operazione B { istruzione 1 L’operazione A è eseguita in un istruzione 2 thread separato da quello ... principale; B comincia prima che A } sia terminata (A e B sono eseguite “in parallelo”)‫‏‬ 6
  • 7. Multi-threading ✦ Se il computer ha più processori: esecuzione parallela dei thread ✦ Se il computer ha un solo processore (o un numero di processori inferiore al numero di thread): esecuzione concorrente (time sharing) esecuzione parallela operazione A operazione B esecuzione operazione A concorrente operazione B tempo 7
  • 8. Vantaggi ✦ Sfruttare il parallelismo quando disponibile ✦ Operazioni lunghe in “background” senza bloccare il programma ✦ Alcuni programmi devono comunque gestire più richieste contemporaneamente (es. web server) 8
  • 9. Svantaggi ✦ Ogni thread richiede memoria per lo stack e altre risorse ✦ Il passaggio del processore da un thread all’altro (context switch) non è un’operazione istantanea Quindi: non è conveniente avere un numero molto elevato di thread 9
  • 10. Sincronizzazione ✦ I thread di un programma hanno tutti accesso alle risorse del programma e possono modificarne lo stato ✦ La modifica dello stato di una struttura dati simultaneamente da parte di più thread può portare la struttura dati in uno stato inconsistente ✦ È necessario un coordinamento tra i thread che devono accedere a una stessa struttura dati (sincronizzazione) 10
  • 11. Sincronizzazione ✦ Esempio: supponiamo di avere una variabile condivisa SALDO che contenga il saldo di un conto corrente PRELIEVO: VERSAMENTO: x ← SALDO y ← SALDO x ← x-50 y ← y+75 SALDO ← x SALDO ← y ✦ Cosa succede se le due operazioni sono eseguite in due thread attivi simultaneamente? 11
  • 12. I thread in Java ✦ In Java è possibile creare un nuovo thread usando la classe Thread ✦ Occorre associare il thread alle operazioni che deve svolgere • Creazione di una sottoclasse di Thread • Creazione di un oggetto che implementi l’interfaccia Runnable, da passare al costruttore di Thread ✦ Il thread deve essere avviato con il metodo start 12
  • 13. Thread in Java ✦ Esempio public class HelloThread extends Thread { public void run() { int i; for(i=0; i<100; i++)‫‏‬ System.out.println("Hello, world"); } } public class TestHello1 { public static void main(String[] args) { // Creazione e avvio di un nuovo thread Thread t=new HelloThread(); t.start(); // Simultaneamente, nel thread del main... int i; for(i=0; i<100; i++)‫‏‬ System.out.println("Salve, mondo"); } } 13
  • 14. Thread in Java ✦ Esempio public class HelloPrinter implements Runnable { public void run() { int i; for(i=0; i<100; i++)‫‏‬ System.out.println("Hello, world"); } } public class TestHello2 { public static void main(String[] args) { // Creazione e avvio di un nuovo thread HelloPrinter hello=new HelloPrinter(); Thread t=new Thread(hello); t.start(); // Simultaneamente, nel thread del main... int i; for(i=0; i<100; i++)‫‏‬ System.out.println("Salve, mondo"); } } 14
  • 15. Daemon thread ✦ Un programma Java termina quando tutti i suoi thread sono terminati ✦ È possibile dichiarare un thread come “di servizio” (daemon thread) in modo che il programma termini quando sono rimasti attivi solo i thread di servizio • A tale scopo si usa il metodo: void setDaemon(boolean isDaemon) della classe Thread prima di chiamare start() 15
  • 16. Sincronizzazione in Java ✦ Ogni oggetto Java contiene una struttura dati detta mutex che consente di garantire che l’accesso all’oggetto venga effettuato da un solo thread per volta (“mutua esclusione”) ✦ Combinando l’uso del mutex con l’incapsulamento il programmatore può gestire il problema della sincronizzazione 16
  • 17. Synchronized ✦ Il mutex di un oggetto si utilizza tramite il costrutto synchronized, la cui sintassi è: synchronized (obj) { istruzione ... } 17
  • 18. Synchronized ✦ Il thread che esegue synchronized “acquisisce” il mutex dell’oggetto indicato per tutta la durata del blocco di istruzioni specificato ✦ Un solo thread alla volta può acquisire un certo mutex ✦ Se un altro thread prova ad acquisire un mutex già impegnato da un altro thread, viene messo in attesa fino a quando l’altro thread non rilascia il mutex 18
  • 19. Synchronized ✦ Esempio public class ContoCorrente { private double saldo; public ContoCorrente(double saldoIniziale) { saldo=saldoIniziale; } public double getSaldo() { synchronized (this) { return saldo; } } public void versa(double x) { synchronized (this) { saldo+=x; } } } 19
  • 20. Synchronized ✦ Spesso occorre rendere synchronized l’intero corpo di un metodo usando il mutex dell’oggetto corrente (this) ✦ Sintassi semplificata: premettere la parola chiave synchronized all’intestazione del metodo 20
  • 21. Synchronized ✦ Esempio public class ContoCorrente { private double saldo; public ContoCorrente(double saldoIniziale) { saldo=saldoIniziale; } public synchronized double getSaldo() { return saldo; } public synchronized void versa(double x) { saldo+=x; } } 21