SlideShare a Scribd company logo
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

More Related Content

What's hot

Notes de cours et tp - Administation Systèmes
Notes de cours et tp  - Administation Systèmes Notes de cours et tp  - Administation Systèmes
Notes de cours et tp - Administation Systèmes
Ikram Benabdelouahab
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancépierrepo
 
Base de donnees Avancees et Intro à NoSQL.ppt
Base de donnees Avancees et Intro à  NoSQL.pptBase de donnees Avancees et Intro à  NoSQL.ppt
Base de donnees Avancees et Intro à NoSQL.ppt
Idriss22
 
Cours 70 410-1
Cours 70 410-1Cours 70 410-1
Cours 70 410-1
Mohamed Diallo
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
Shellmates
 
C5 Réseaux : vlsm-classe-nat
C5 Réseaux : vlsm-classe-natC5 Réseaux : vlsm-classe-nat
C5 Réseaux : vlsm-classe-nat
PRONETIS
 
Présentation python
Présentation pythonPrésentation python
Présentation python
Sarah
 
Chapitre 6 - couche transport
Chapitre 6  - couche transportChapitre 6  - couche transport
Chapitre 6 - couche transport
Tarik Zakaria Benmerar
 
POO Java Chapitre 6 Exceptions
POO Java  Chapitre 6 ExceptionsPOO Java  Chapitre 6 Exceptions
POO Java Chapitre 6 Exceptions
Mouna Torjmen
 
Cours java avance débutant facile l'essentiel swing ,events
Cours java avance débutant facile l'essentiel swing ,events Cours java avance débutant facile l'essentiel swing ,events
Cours java avance débutant facile l'essentiel swing ,events
Houssem Hamrouni
 
le RSSI dans l'entreprise: Introduction INFOSAFE
le RSSI dans l'entreprise: Introduction INFOSAFEle RSSI dans l'entreprise: Introduction INFOSAFE
le RSSI dans l'entreprise: Introduction INFOSAFE
Prof. Jacques Folon (Ph.D)
 
Chapitre 6 traitement des exceptions
Chapitre 6  traitement des exceptionsChapitre 6  traitement des exceptions
Chapitre 6 traitement des exceptions
Amir Souissi
 
Cours développement côté serveur
Cours développement côté serveurCours développement côté serveur
Cours développement côté serveur
Houda TOUKABRI
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
Abdoulaye Dieng
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
Mouna Torjmen
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
Yassine Badri
 
Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++
Fabio Hernandez
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
ENSET, Université Hassan II Casablanca
 
Admin_Réseaux_linux_cours.pptx
Admin_Réseaux_linux_cours.pptxAdmin_Réseaux_linux_cours.pptx
Admin_Réseaux_linux_cours.pptx
simomjidi
 

What's hot (20)

Notes de cours et tp - Administation Systèmes
Notes de cours et tp  - Administation Systèmes Notes de cours et tp  - Administation Systèmes
Notes de cours et tp - Administation Systèmes
 
Cours python avancé
Cours python avancéCours python avancé
Cours python avancé
 
Base de donnees Avancees et Intro à NoSQL.ppt
Base de donnees Avancees et Intro à  NoSQL.pptBase de donnees Avancees et Intro à  NoSQL.ppt
Base de donnees Avancees et Intro à NoSQL.ppt
 
Cours 70 410-1
Cours 70 410-1Cours 70 410-1
Cours 70 410-1
 
Introduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El HassaniIntroduction à Python - Achraf Kacimi El Hassani
Introduction à Python - Achraf Kacimi El Hassani
 
C5 Réseaux : vlsm-classe-nat
C5 Réseaux : vlsm-classe-natC5 Réseaux : vlsm-classe-nat
C5 Réseaux : vlsm-classe-nat
 
Présentation python
Présentation pythonPrésentation python
Présentation python
 
Chapitre 6 - couche transport
Chapitre 6  - couche transportChapitre 6  - couche transport
Chapitre 6 - couche transport
 
POO Java Chapitre 6 Exceptions
POO Java  Chapitre 6 ExceptionsPOO Java  Chapitre 6 Exceptions
POO Java Chapitre 6 Exceptions
 
Cours java avance débutant facile l'essentiel swing ,events
Cours java avance débutant facile l'essentiel swing ,events Cours java avance débutant facile l'essentiel swing ,events
Cours java avance débutant facile l'essentiel swing ,events
 
le RSSI dans l'entreprise: Introduction INFOSAFE
le RSSI dans l'entreprise: Introduction INFOSAFEle RSSI dans l'entreprise: Introduction INFOSAFE
le RSSI dans l'entreprise: Introduction INFOSAFE
 
Expose dns
Expose dnsExpose dns
Expose dns
 
Chapitre 6 traitement des exceptions
Chapitre 6  traitement des exceptionsChapitre 6  traitement des exceptions
Chapitre 6 traitement des exceptions
 
Cours développement côté serveur
Cours développement côté serveurCours développement côté serveur
Cours développement côté serveur
 
Fondamentaux d’une API REST
Fondamentaux d’une API RESTFondamentaux d’une API REST
Fondamentaux d’une API REST
 
POO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 EncapsulationPOO Java Chapitre 2 Encapsulation
POO Java Chapitre 2 Encapsulation
 
Ch 01 poo
Ch 01 pooCh 01 poo
Ch 01 poo
 
Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++Partie 12: Polymorphisme — Programmation orientée objet en C++
Partie 12: Polymorphisme — Programmation orientée objet en C++
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
Admin_Réseaux_linux_cours.pptx
Admin_Réseaux_linux_cours.pptxAdmin_Réseaux_linux_cours.pptx
Admin_Réseaux_linux_cours.pptx
 

Similar to Lezione 2: I thread

Java lezione 8
Java lezione 8Java lezione 8
Java lezione 8
Sergio Ronchi
 
Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)Programmazione concorrente in Java (vecchio modello)
Programmazione concorrente in Java (vecchio modello)
Davide Carboni
 
Lezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern ComportamentaliLezione 8: Design Pattern Comportamentali
Lezione 8: Design Pattern Comportamentali
Andrea Della Corte
 
Lezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern ComportamentaliLezione 7: Design Pattern Comportamentali
Lezione 7: Design Pattern Comportamentali
Andrea Della Corte
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
Riccardo Franconi
 
[Objective-C] - Introduzione
[Objective-C] - Introduzione[Objective-C] - Introduzione
[Objective-C] - Introduzione
Jacopo Di Stanislao
 
Lezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern StrutturaliLezione 6a: Design Pattern Strutturali
Lezione 6a: Design Pattern Strutturali
Andrea Della Corte
 
Let's give it a GO!
Let's give it a GO!Let's give it a GO!
Let's give it a GO!
MarioTraetta
 
Design pattern template method
Design pattern template methodDesign pattern template method
Design pattern template methodNelson Firmani
 
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
Andrea Della Corte
 
Applicazioni native in java
Applicazioni native in javaApplicazioni native in java
Applicazioni native in java
Federico Paparoni
 
Metodi asincroni in spring
Metodi asincroni in springMetodi asincroni in spring
Metodi asincroni in spring
Vitalij Zadneprovskij
 
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)
DotNetMarche
 
Concurrency
ConcurrencyConcurrency
Concurrency
Ugo Landini
 
Introduzione a node.js
Introduzione a node.jsIntroduzione a node.js
Introduzione a node.js
Luciano Colosio
 
Introduzione a Node.js
Introduzione a Node.jsIntroduzione a Node.js
Introduzione a Node.js
Michele Capra
 
Lezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern ComportamentaliLezione 9: Design Pattern Comportamentali
Lezione 9: Design Pattern Comportamentali
Andrea Della Corte
 

Similar to 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
 

More from Andrea Della Corte

Lezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern StrutturaliLezione 6b: Design Pattern Strutturali
Lezione 6b: Design Pattern Strutturali
Andrea Della Corte
 
Lezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern CreazionaliLezione 5: Design Pattern Creazionali
Lezione 5: Design Pattern Creazionali
Andrea Della Corte
 
Lezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme ProgrammingLezione 3: Sviluppo in Extreme Programming
Lezione 3: Sviluppo in Extreme Programming
Andrea Della Corte
 
Lezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme ProgrammingLezione 2: Pianificazione in Extreme Programming
Lezione 2: Pianificazione in Extreme Programming
Andrea Della Corte
 
Lezione 1: I metodi agili
Lezione 1: I metodi agiliLezione 1: I metodi agili
Lezione 1: I metodi agili
Andrea Della Corte
 
Lezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLSLezione 5: Socket SSL/ TLS
Lezione 5: Socket SSL/ TLS
Andrea Della Corte
 
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
Andrea Della Corte
 
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)
Andrea Della Corte
 
Lezione 9: Web Service in Java
Lezione 9: Web Service in JavaLezione 9: Web Service in Java
Lezione 9: Web Service in Java
Andrea Della Corte
 
Lezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web ServiceLezione 8: Introduzione ai Web Service
Lezione 8: Introduzione ai Web Service
Andrea Della Corte
 
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
Andrea Della Corte
 
Lezione 6: Remote Method Invocation
Lezione 6: Remote Method InvocationLezione 6: Remote Method Invocation
Lezione 6: Remote Method Invocation
Andrea Della Corte
 
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
Andrea Della Corte
 
Lezione 1: I/O in Java
Lezione 1: I/O in JavaLezione 1: I/O in Java
Lezione 1: I/O in Java
Andrea Della Corte
 
Lezione 3: Connessioni TCP
Lezione 3: Connessioni TCPLezione 3: Connessioni TCP
Lezione 3: Connessioni TCP
Andrea Della Corte
 
Lezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDPLezione 4: Comunicazione con UDP
Lezione 4: Comunicazione con UDP
Andrea Della Corte
 
Introduzione ai CRM
Introduzione ai CRMIntroduzione ai CRM
Introduzione ai CRM
Andrea Della Corte
 

More from 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
 

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