Come si crea un thread. Thread in Java. Altro modo di creare un thread. Come si crea un thread

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Come si crea un thread. Thread in Java. Altro modo di creare un thread. Come si crea un thread"

Transcript

1 Thread in Java Come si crea un thread Una applicazione Java che usa i thread può eseguire più attività contemporaneamente. Esempio: aggiornare l'informazione grafica sullo schermo e accedere alla rete. Ad esempio, quando un main crea una finestra, viene attivato un thread di interfaccia utente, diverso da quello del main. In alcuni casi i thread possono procedere in modo indipendente uno dall'altro (comportamento asincrono), in altri devono essere sincronizzati fra loro (es. produttore - consumatore). Si definisce una classe che eredita da Thread e che implementa un metodo run(). Quando si crea un oggetto di questa classe si esegue il suo metodo start() per far partire il thread. class MiaClasse extends Thread { public void run() { System.out.println ("Sono il thread " + getname ());... MiaClasse t1 = new MiaClasse(); MiaClasse t2 = new MiaClasse(); t1.start(); t2.start(); Come si crea un thread Altro modo di creare un thread Per avviare un thread si deve eseguire il metodo start(), che si occupa di inizializzare un nuovo thread e poi chiama run(). Non è possibile chiamare direttamente il metodo run() perché questo non creerebbe un nuovo thread. L ereditarietà è usata in modo poco naturale. Non ha molto senso dire che MiaClasse è un Thread. Quello che si intende è che è possibile attivare un nuovo thread facendogli eseguire il metodo run() della MiaClasse. Si definisce una classe che implementa l'interfaccia Runnable che possiede il metodo run. class Esempio implements Runnable { public void run() {... Per attivare un thread: Esempio es = new Esempio(); Thread t = new Thread(es), t.start();

2 Altro modo di creare un thread Altro modo di creare un thread class MiaClasse implements Runnable { public void run () { System.out.println ("Sono il thread " + Thread.currentThread().getName ());... MiaClasse mt = new MiaClasse(); Thread t1 = new Thread (mt); Thread t2 = new Thread (mt); t1.start(); t2.start(); class MiaClasse implements Runnable { int i = 0; public void run () { i++; System.out.println (i);... MiaClasse mt = new MiaClasse(); Thread t1 = new Thread (mt); Thread t2 = new Thread (mt); t1.start(); t2.start(); Viene stampato prima 1 e poi 2. Infatti esiste un unico oggetto della MiaClasse, legato alla variabile mt, che ha una variabile locale i. I thread t1 e t2 eseguono entrambi il metodo run di questo oggetto, incrementando la stessa variabile i. Sincronizzazione Sincronizzazione di blocchi in Java Il meccanismo di sincronizzazione di Java si basa sulla nozione di monitor. Per ogni classe in Java è possibile definire dei metodi synchronized. I metodi synchronized realizzano delle sezioni critiche. Se una classe contiene dei metodi synchronized, Java associa un lock ad ogni oggetto della classe. Quando un thread chiama un metodo sincronizzato, l'oggetto diventa bloccato (locked). Altri thread che tentano di accedere allo stesso oggetto chiamando metodi sincronizzati rimangono bloccati fino a quando il thread precedente non rilascia l'oggetto, terminando l'esecuzione del metodo. Oltre ai metodi, Java consente di dichiarare synchronized anche blocchi di codice: Object mutexlock = new Object()... public void unmetodo() { sezionenoncritica(); synchronized(mutexlock) { sezionecritica(); sezionenoncritica(); La cosa può essere utile quando solo una piccola parte del codice di un metodo manipola dati condivisi e va quindi eseguita in mutua esclusione.

3 Sincronizzazione I monitor in JAVA Da un metodo sincronizzato si possono chiamare i metodi: wait() - sblocca l'oggetto e mette il thread che lo ha eseguito in una coda di attesa associata all'oggetto; notify() - risveglia un thread a caso fra quelli in attesa, dandogli la possibilità di competere per il lock e di riprendere l'esecuzione dal punto in cui si era messo in wait; notifyall() - risveglia tutti i thread in attesa (ne entra solo uno per volta). Sono metodi di Object e quindi vengono ereditati da qualunque classe. Se si tenta di chiamarli da un metodo non sincronizzato, si ha un errore a runtime. wait ( ) e notify ( ) wait ( ) e notify ( ) Ogni oggetto ha associato un solo wait set (insieme di thread sospesi da un wait() eseguito in un suo metodo di monitor). Con l invocazione di wait(): il monitor viene liberato, lo stato del thread chiamante diventa NOT RUNNABLE. Con l invocazione di notify(), eseguita da un thread (in un metodo di monitor): se il wait set è vuoto, non accade nulla altrimenti, uno (qualsiasi) dei thread nel wait set diventa RUNNABLE.

4 notify ( ) e notifyall ( ) Stati di un thread Un thread reso RUNNABLE tramite notify() deve: riacquisire il possesso del monitor, in competizione (senza particolare priorità) con eventuali altri thread che siano in attesa di entrare nel monitor (avendo invocato un metodo synchronized dello stesso oggetto a monitor già occupato); riverificare subito la condizione attesa (per la quale aveva eseguito wait(); se essa non è verificata, riesegue wait() e si sospende di nuovo (NOT RUNNABLE) nel wait set. Il thread che ha eseguito notify() continua la sua esecuzione. Non è possibile decidere quale thread svegliare mediante notify(): la politica di gestione della coda è diversa da piattaforma a piattaforma. Il metodo notifyall() estrae dal wait set e rende RUNNABLE tutti i thread in attesa. Un thread runnable può essere eseguito. L'effettiva esecuzione dipende dalla politica dello scheduler. Dopo essere stato attivato, un thread può bloccarsi se chiama il metodo sleep esegue una wait (riparte con notify) sta aspettando una operazione di I/O Il thread si ferma quando la run termina. Esistono anche dei metodi suspend, resume e stop, ma sono deprecati. Esempio Realizzazione dei semafori in Java Per evitare che l output si mescoli con quello di altri thread, si può rendere mutuamente esclusivo l uso dell oggetto System.out: synchronized(system.out) { System.out.print( prima parte della ); System.out.println( prima riga, ); System.out.println( seconda riga. ); La cosa funziona purché anche gli altri thread che invocano metodi dello stesso oggetto lo facciano all interno di un blocco protetto con lo stesso statement synchronized. Un semaforo in Java può essere facilmente costruito definendo sem_wait() e sem_signal() come metodi synchronized, cosa che ne assicura l esecuzione in mutua esclusione, ovvero l atomicità. Vediamo, ad esempio, la costruzione di una classe che modelli un semaforo contatore o intero.

5 Esempio Regole di sincronizzazione in Java public class Semaphore() { public Semaphore(int v) { //sem. numerico private int value = v; public synchronized void sem_wait() { while (value <=0) { try { wait(); catch(interruptedexception e){ value--; public synchronized void sem_signal() { ++value; notify(); Un thread che ha ottenuto l accesso a un metodo (o a un blocco) synchronized di un oggetto, può accedere ad altri metodi (o blocchi) synchronized dello stesso oggetto. Un thread può invocare un metodo synchronized di un oggetto dall interno di un metodo synchronized di un altro oggetto (pericoloso: rischio di deadlock). I metodi non synchronized possono essere invocati liberamente, anche se è in corso l esecuzione di un metodo synchronized del medesimo oggetto (però non devono manipolare i dati protetti). Se il wait set di un oggetto è vuoto, l invocazione di notify() o di notifyall() non produce alcun effetto. I thread e la JVM I thread e la JVM: priorità Oltre ai thread creati ed avviati da un applicazione (o da un applet) Java, ce ne sono altri (deamon thread o thread sistema), avviati dalla JVM, per svolgere attività di servizio: thread di gestione della memoria, thread per il controllo grafico, thread di garbage collection, thread di gestione di eventi temporali (sleep(), ). Le specifiche della JVM non indicano come i thread Java debbano essere mappati sulle funzioni multi-tasking del S.O. sottostante: diverse piattaforme possono adottare soluzioni diverse. (In Windows NT, ad es., a ciascun thread Java corrisponde un processo di sistema). A ciascun thread Java è associato un livello di priorità: il livello di priorità minima è Thread.MIN_PRIORITY (1); la priorità massima è Thread.MAX_PRIORITY (10); il livello di default è Thread.NORM_PRIORITY (5); Un thread acquisisce la stessa priorità del thread che lo ha creato; La priorità di un thread può essere impostata in modo esplicito con il metodo setpriority(); La priorità di un thread può essere impostata sia prima che il thread venga avviato con il metodo start(), sia mentre è alive.

6 I thread e la JVM: priorità I thread e la JVM: scheduling Il thread RUNNABLE con la priorità maggiore rimane in esecuzione fino a quando: cede il controllo chiamando il metodo yield; smette di essere eseguibile; un thread di priorità superiore diventa eseguibile. Se ci sono più thread con la stessa priorità, Java non garantisce la politica con cui i thread saranno gestiti. Se si vuole dare la possibilità a tutti i thread di essere attivati, è conveniente far eseguire ogni tanto una sleep ad ogni thread. E' possibile definire gruppi di thread mediante la classe ThreadGroup. In questo modo è possibile gestire tutti i thread del gruppo in modo omogeneo. La JVM gestisce i thread con un meccanismo di scheduling di tipo preemptive a priorità: diviene RUNNING il thread RUNNABLE con priorità più elevata (se ce n è più d uno, viene usata una coda FIFO); lo scheduling da parte della JVM avviene quando: - il thread in esecuzione esce dallo stato RUNNABLE (in seguito a suspend(), stop(), wait(), fine di run(), attesa di I/O); - un thread con priorità più elevata di quello RUNNING diviene RUNNABLE: in questo caso si ha il preemption del thread RUNNING (che diventa RUNNABLE), mentre diviene RUNNING quello a priorità più elevata. I thread e la JVM: time-slicing Problema produttore-consumatore Anche se specifiche della JVM non lo indicano, in alcune piattaforme lo scheduling dei thread può utilizzare anche un meccanismo di timeslicing; in tal caso il thread RUNNING prosegue l esecuzione finché si verifica la prima delle seguenti circostanze: il thread esce dallo stato RUNNABLE; il thread subisce un preemption a favore di un thread con priorità più elevata; è trascorso il quanto temporale assegnato. In assenza di time-slicing un thread può cedere il controllo spontaneamente invocando: yield(): il thread da RUNNING diventa RUNNABLE e consente che divenga RUNNING un altro thread RUNNABLE di uguale priorità; sleep(): il thread diventa NON-RUNNABLE per un po. public class CubbyHole { private int contents ; private boolean available = false; public synchronized int get () { while (available == false) { try { wait(); catch (InterruptedException e) { available = false; notifyall(); return contents; public synchronized void put (int value) { while (available == true) { try { wait(); catch (InterruptedException e) { contents = value ; available = true; notifyall();

7 Problema produttore-consumatore Problema produttore-consumatore public class Producer extends Thread { private CubbyHole cubbyhole ; private int number ; public Producer(CubbyHole c, int number ) { cubbyhole = c; this.number = number; public void run() { for (int i = 0; i < 10; i++) { cubbyhole.put(i); System.out.println("Producer #" + this.number + " put : " + i); try { sleep((int)(math.random() * 100)); catch (InterruptedException e) { public class Consumer extends Thread { private CubbyHole cubbyhole ; private int number ; public Consumer(CubbyHole c, int number ) { cubbyhole = c; this.number = number; public void run() { int value = 0; for (int i = 0; i < 10; i++) { value = cubbyhole.get(); System.out.println("Consumer #" + this.number+ " got : " + value); Problema produttore-consumatore Risorse public class ProducerConsumerTest { public static void main (String [] args) { CubbyHole c = new CubbyHole(); Producer p1 = new Producer (c, 1); Consumer c1 = new Consumer (c, 1); p1.start(); c1.start(); Paul Hyde,"Java Thread Programming, Sams Publishing, Bruce Eckel, Thinking in Java, 3rd Edition, Prentice-Hall, December 2002

THREAD. Programmazione in rete e laboratorio. Come si crea un thread

THREAD. Programmazione in rete e laboratorio. Come si crea un thread Programmazione in rete e laboratorio JAVA - Thread Alberto Martelli THREAD Thread: flusso sequenziale di controllo (esecuzione di istruzioni) in un programma. Nello stesso programma si possono far partire

Dettagli

Esercitazione 2: Java Thread

Esercitazione 2: Java Thread Esercitazione 2: Java Thread Thread Un thread è un singolo flusso sequenziale di controllo all interno di un processo Un thread (o processo leggero) è un unità di esecuzione che condivide codice e dati

Dettagli

Esercitazione 2: Java Thread. Java Thread. Java Thread. Un thread:

Esercitazione 2: Java Thread. Java Thread. Java Thread. Un thread: Esercitazione 2: Thread Un thread è un singolo flusso sequenziale di controllo all interno di un processo Un thread (o processo leggero) è un unità di esecuzione che condivide codice e dati con altri thread

Dettagli

Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java

Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java programmi sorgente: files.java compilatore Indipendenza di java dalla macchina ospite Programmi java Programmi java Programmi java files.class bytecode linker/loader bytecode bytecode Java API files.class

Dettagli

Eccezioni e Thread (cenni)

Eccezioni e Thread (cenni) Eccezioni e Thread (cenni) Linguaggi di Programmazione: Paradigmi di Programmazione (Sperimentazioni) Matteo Baldoni Dipartimento di Informatica Universita` degli Studi di Torino C.so Svizzera, 185 I-10149

Dettagli

Java Thread. Thread. Un thread

Java Thread. Thread. Un thread Java Thread Thread Un thread è un singolo flusso sequenziale di controllo all interno di un processo Un thread (o processo leggero) è un unità di esecuzione che condivide codice e dati con altri thread

Dettagli

Processi e multitasking

Processi e multitasking Processi e multitasking Multitasking: caratteristica di un S.O. che permette l esecuzione simultanea (o pseudosimultanea) di più processi Cooperative Multitasking: gestione affidata ai processi stessi,

Dettagli

Processi e multitasking. Thread e Multithreading

Processi e multitasking. Thread e Multithreading Processi e multitasking Thread e Multithreading Multitasking: caratteristica di un S.O. che permette l esecuzione simultanea (o pseudosimultanea) di più processi Cooperative Multitasking: gestione affidata

Dettagli

Multitheading. Corso di Laurea in Informatica. Sperimentazioni di Linguaggi di Programmazione: Paradigmi di Programmazione. a.a.

Multitheading. Corso di Laurea in Informatica. Sperimentazioni di Linguaggi di Programmazione: Paradigmi di Programmazione. a.a. Multitheading Corso di Laurea in Informatica Sperimentazioni di Linguaggi di Programmazione: Paradigmi di Programmazione a.a. 1999/2000 Matteo Baldoni 1 Thread multipli all interno di un Task thread PC

Dettagli

SISTEMI OPERATIVI. Sincronizzazione in Java (Java object lock e segnali wait-notify-notifyall)

SISTEMI OPERATIVI. Sincronizzazione in Java (Java object lock e segnali wait-notify-notifyall) SISTEMI OPERATIVI (MODULO DI INFORMATICA II) LABORATORIO Sincronizzazione in Java (Java object lock e segnali wait-notify-notifyall) Prof. Luca Gherardi Prof.ssa Patrizia Scandurra (anni precedenti) Università

Dettagli

Thread in Java. Thread = flusso di esecuzione indipendente nel codice del programma

Thread in Java. Thread = flusso di esecuzione indipendente nel codice del programma Thread in Java Thread = flusso di esecuzione indipendente nel codice del programma Come si può realizzare il concetto di Thread in Java? Seguendo la filosofia OO: sono oggetti particolari ai quali si richiede

Dettagli

I Thread. un thread è uno stream di esecuzione del programma

I Thread. un thread è uno stream di esecuzione del programma I Thread un thread è uno stream di esecuzione del programma Sistema Operativo e Thread Un processo o thread una successione di operazioni che vengono eseguite dal sistema operativo in modo sequenziale

Dettagli

Corso di Laurea in Ingegneria Informatica. Corso di Reti di Calcolatori A.A. 2009/2010

Corso di Laurea in Ingegneria Informatica. Corso di Reti di Calcolatori A.A. 2009/2010 Corso di Laurea in Ingegneria Informatica Corso di Reti di Calcolatori l Introduzione ai Thread in Java A.A. 2009/2010 1 Thread Un thread è un flusso sequenziale di esecuzione di istruzioni all interno

Dettagli

Programmazione concorrente con il linguaggio Java

Programmazione concorrente con il linguaggio Java Programmazione concorrente con il linguaggio Java Thread, Mutua Esclusione e Sincronizzazione Alcuni aspetti architetturali e di prestazioni Concetto di thread Un thread è un flusso di esecuzione indipendente

Dettagli

I Thread. Sistema Operativo e Thread

I Thread. Sistema Operativo e Thread I Thread un thread è uno stream di esecuzione del programma Sistema Operativo e Thread Un processo o thread una successione di operazioni che vengono eseguite dal sistema operativo in modo sequenziale

Dettagli

Java thread, concorrenza

Java thread, concorrenza Java thread, concorrenza laboratorio 1 A.Memo febbraio 2004 il thread principale in Java ogni programma in esecuzione è un thread il metodo main() è associato al main thread per poter accedere alle proprietà

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA9 B3.1 Mutua esclusione 1 Prerequisiti Programmazione concorrente Sezione critica Mutua esclusione lock() e unlock() 2 1 Introduzione Si considerino le seguenti situazioni

Dettagli

THREAD IN JAVA. Thread. Un thread (lightweight process) è un singolo flusso sequenziale di controllo all interno di un processo

THREAD IN JAVA. Thread. Un thread (lightweight process) è un singolo flusso sequenziale di controllo all interno di un processo THREAD IN JAVA Come si può realizzare il concetto di Thread in Java? NEL MODO PIU NATURALE! Sono oggetti particolari ai quali si richiede un servizio (chiamato start()) corrispondente al lancio di una

Dettagli

Esercizio Sincronizzazione Thread

Esercizio Sincronizzazione Thread Esercitazione di oratorio 17/10/2007 Esercizio Il laboratorio di Informatica del Polo Marzotto e utilizzato da tre tipi di utenti, studenti, tesisti e professori ed ogni utente deve fare una richiesta

Dettagli

I Thread in Java. Sistemi Operativi L-A. I threads in Java

I Thread in Java. Sistemi Operativi L-A. I threads in Java I Thread in Java I threads in Java Ogni programma Java contiene almeno un singolo thread, corrispondente all esecuzione del metodo main() sulla JVM. E possibile creare dinamicamente nuovi thread attivando

Dettagli

Sincronizzazione dei Thread in Java. Daniela Tibaldi:

Sincronizzazione dei Thread in Java. Daniela Tibaldi: Sincronizzazione dei Thread in Java Daniela Tibaldi: dtibaldi@deis.unibo.it 1) Sottoclasse della classe Thread Thread possiede un metodo run() che la sottoclasse deve ridefinire si crea un istanza della

Dettagli

Thread Java. Processi

Thread Java. Processi Thread Java Giacomo Cabri 31 Ottobre 2003 Seminario di Principi di Sistemi Operativi Giacomo Cabri 1 Processi Nei sistemi concorrenti, il termine processo denota la singola attività eseguita in modo indipendente

Dettagli

Threads in Java. I threads. Costruttori. Prof.ssa Sara Michelangeli

Threads in Java. I threads. Costruttori. Prof.ssa Sara Michelangeli Threads in Java Prof.ssa Sara Michelangeli I threads I threads o "processi leggeri" (light weight process) sono flussi di esecuzione nell'ambito di uno stesso processo, che condividono tra loro risorse

Dettagli

Sincronizzazione dei Thread in Java

Sincronizzazione dei Thread in Java 1) Sottoclasse della classe Thread Sincronizzazione dei Thread in Java Daniela Tibaldi: dtibaldi@deis.unibo.it Thread possiede un metodo run() che la sottoclasse deve ridefinire si crea un istanza della

Dettagli

Concorrenza e sincronizzazione

Concorrenza e sincronizzazione Concorrenza e sincronizzazione Ingegneria del software Ing. Jody Marca jody.marca@polimi.it Cosa faremo oggi 2 Concorrenza Sincronizzazione Concorrenza 3 Nei programmi Java fino ad ora sviluppati è presente

Dettagli

Thread in Java. Linguaggi. Corso di Laurea in Ingegneria delle Telecomunicazioni A.A

Thread in Java. Linguaggi. Corso di Laurea in Ingegneria delle Telecomunicazioni A.A Linguaggi Corso di Laurea in Ingegneria delle Telecomunicazioni A.A. 2010-2011 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it Thread in Java 1 Cos è un thread?

Dettagli

Java Virtual Machine

Java Virtual Machine Java Virtual Machine programmi sorgente: files.java compilatore files.class bytecode linker/loader bytecode bytecode Java API files.class interprete macchina ospite Indipendenza di java dalla macchina

Dettagli

Programmazione concorrente in Java

Programmazione concorrente in Java Programmazione concorrente in Java Seminario di Principi di Sistemi Operativi - LM Ph.D. Ing. Mariachiara Puviani - mariachiara.puviani@unimore.it http://mars.ing.unimo.it/wiki/index.php/user:mariachiara

Dettagli

Generalita' sui Thread

Generalita' sui Thread Generalita' sui Thread Un thread (o processo leggero) è una attività, descritta da una sequenza di istruzioni, che esegue indipendentemente da altre, all'interno del contesto di esecuzione di un programma.

Dettagli

Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002. Sistemi Operativi Corsi A e B. Esercitazioni 7 e 8

Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002. Sistemi Operativi Corsi A e B. Esercitazioni 7 e 8 Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002 Corsi A e B Esercitazioni 7 e 8 Bounded Buffer con sincronizzazione Java (1) public class BoundedBuffer private

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA9 B3.2 Produttore-consumatore 1 Prerequisiti Elementi di programmazione concorrente Mutua esclusione Produttore-consumatore 2 1 Introduzione In questa Unità vediamo

Dettagli

Multithreading/2. Più richieste servite simultaneamente > 1 thread per ogni connessione client (+ 1 thread per accettare nuove richieste).

Multithreading/2. Più richieste servite simultaneamente > 1 thread per ogni connessione client (+ 1 thread per accettare nuove richieste). Multithreading Osservazioni su EchoServer Programmazione TCP in Java EchoServer ed EchoClient Uso del multithreading nella programmazione di rete ChatClient e ChatServer Multithreading/2 Più richieste

Dettagli

I Thread in Java parte 2: Sincronizzazione. Sistemi Operativi T AA

I Thread in Java parte 2: Sincronizzazione. Sistemi Operativi T AA I Thread in Java parte 2: Sincronizzazione Sistemi Operativi T AA 2010-2011 1 Sincronizzazione: wait e notify wait set: coda di thread associata ad ogni oggetto, inizialmente vuota. I thread entrano ed

Dettagli

I thread di uno stesso processo condividono dati e codice del processo, ma lo stack di esecuzione ed il program counter sono privati.

I thread di uno stesso processo condividono dati e codice del processo, ma lo stack di esecuzione ed il program counter sono privati. Un thread (o processo leggero) è una attività, descritta da una sequenza di istruzioni, che esegue all'interno del contesto di esecuzione di un programma. Un thread procede nella sua esecuzione per portare

Dettagli

I Thread in Java! parte 2:! Sincronizzazione!

I Thread in Java! parte 2:! Sincronizzazione! I Thread in Java! parte 2:! Sincronizzazione! 1 Sincronizzazione: wait e notify wait set: coda di thread associata ad ogni oggetto, inizialmente vuota. I thread entrano ed escono dal wait set utilizzando

Dettagli

Definizione di thread Proprietà dei thread in Java Gestione delle priorità nei programmi multithreaded Gruppi di thread Accesso a variabili condivise

Definizione di thread Proprietà dei thread in Java Gestione delle priorità nei programmi multithreaded Gruppi di thread Accesso a variabili condivise CEFRIEL Centro per la Formazione e la Ricerca in Ingegneria dell Informazione Politecnico di Milano Java Multithreading Programmazione concorrente in Java Docente: Diego Peroni peroni@cefriel.it Indice

Dettagli

Multithreading. Multithreading/2

Multithreading. Multithreading/2 Multithreading Osservazioni su EchoServer Programmazione TCP in Java EchoServer ed EchoClient Uso del multithreading nella programmazione di rete ChatClient e ChatServer Esempio di Web server(?) Multithreading/2

Dettagli

: $. $ # % 9 ; / % <! = > ;!! " # $ % &! 8 - & $ 9 9 -! %!! " # $ % &!

: $. $ # % 9 ; / % <! = > ;!!  # $ % &! 8 - & $ 9 9 -! %!!  # $ % &! : $. $ # % 9 ; / % ;!! " # $ % &! Un thread (o processo leggero) è una attività, descritta da una sequenza di istruzioni, che esegue all'interno del contesto di esecuzione di un programma. Un thread

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 13 Alberto Ceselli ceselli@dti.unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 7 Maggio 2007 Outline Java e C# 1 Java

Dettagli

Java: costrutti avanzati

Java: costrutti avanzati Java: costrutti avanzati Costrutti relativi alla versione 1.1 Variabili final Classi interne Gestione delle eccezioni Programmazione concorrente 109 Variabili final A partire dalla versione 1.1 del linguaggio,

Dettagli

INTRODUZIONE AL MECCANISMO DEI THREAD DI JAVA

INTRODUZIONE AL MECCANISMO DEI THREAD DI JAVA INTRODUZIONE AL MECCANISMO DEI THREAD DI JAVA Java mette a disposizione la classe Thread e l interfaccia Runnable per consentire l'implementazione di tipi thread definiti dall'utente. In entrambi i casi,

Dettagli

Problema del buffer limitato. Lorenzo Gallucci

Problema del buffer limitato. Lorenzo Gallucci Problema del buffer limitato Lorenzo Gallucci Buffer limitato Immaginiamo una struttura dati che contiene delle informazioni La struttura può, in ogni momento, avere dello spazio libero oppure no Se vi

Dettagli

Programmazione concorrente in Java

Programmazione concorrente in Java Programmazione concorrente in Java Multithreading in Java Ogni thread e un oggetto, creato come istanza della classe java.lang.thread La classe Thread contiene tutti i metodi per gestire i threads L utente

Dettagli

Introduzione. Java. Threads. Threads. G. Prencipe

Introduzione. Java. Threads. Threads. G. Prencipe Java concorrenza G. Prencipe prencipe@di.unipi.it Introduzione Un processo è un programma in esecuzione con un proprio spazio di indirizzi Un Sistema Operativo multitasking è in grado di eseguire diversi

Dettagli

Analisi e progettazione concorrente. Studio di caso: ATM (seconda parte) Real Time: concetti e termini. Analisi e progettazione concorrente

Analisi e progettazione concorrente. Studio di caso: ATM (seconda parte) Real Time: concetti e termini. Analisi e progettazione concorrente Bibliografia e riferimenti,6 PRG % &RUVR GL,QJHJQHULD GHO 6RIWZDUH 80/ Analisi e progettazione concorrente Studio di caso: ATM (seconda parte) Real Time: concetti e termini - Hassan Gomaa: Designing concurrent

Dettagli

Corso di Programmazione Concorrente. Java Thread. Valter Crescenzi

Corso di Programmazione Concorrente. Java Thread. Valter Crescenzi Corso di Programmazione Concorrente Java Thread Valter Crescenzi http://crescenzi.inf.uniroma3.it Sommario Java Thread e supporto alla PC della piattaforma Java Creazione di Thread con java.lang.thread

Dettagli

Programmazione Concorrente

Programmazione Concorrente Programmazione Concorrente Programmazione in Ambienti Distribuiti A.A. 2003-04 Programmi sequenziali Stack (Variabili locali) Stack pointer Istruzioni Heap (Oggetti) 2 1 Processi paralleli Processo 1 Processo

Dettagli

Thread. Java Thread. 1) come sottoclasse della classe Thread

Thread. Java Thread. 1) come sottoclasse della classe Thread Thread Java Thread Un thread (lightweight process) è un singolo flusso sequenziale di controllo all interno di un processo Due modalità per implementare thread in Java: 1. come sottoclasse della classe

Dettagli

Threads. Processi Single e Multi-thread

Threads. Processi Single e Multi-thread Threads Processi Single e Multi-thread 1 Benefici Diminuisce i tempi di risposta di una applicazione: durante attesa altre attività della applicazione possono essere fatte Condivisione delle risorse: tutti

Dettagli

Corso di Programmazione Concorrente. Java Thread. Valter Crescenzi http://crescenzi.dia.uniroma3.it

Corso di Programmazione Concorrente. Java Thread. Valter Crescenzi http://crescenzi.dia.uniroma3.it Corso di Programmazione Concorrente Java Thread Valter Crescenzi http://crescenzi.dia.uniroma3.it Sommario Java Thread e supporto alla PC della piattaforma Java Creazione di Thread con java.lang.thread

Dettagli

Nona Esercitazione. Thread e memoria condivisa Sincronizzazione tramite semafori

Nona Esercitazione. Thread e memoria condivisa Sincronizzazione tramite semafori Nona Esercitazione Thread e memoria condivisa Sincronizzazione tramite semafori Agenda Esercizio 1 DA SVOLGERE Sincronizzazione avanzata produttore consumatore tramite semafori Esercizio 2 DA SVOLGERE

Dettagli

Java Threads. esempi

Java Threads. esempi Java Threads esempi Creazione public class ProvaThread { public static void main(string[] args) { Runnable r = new MyRunnable(); Thread t = new Thread(r);.... class MyRunnable implements Runnable { public

Dettagli

Multithreading in Java. Fondamenti di Sistemi Informativi 2014-2015

Multithreading in Java. Fondamenti di Sistemi Informativi 2014-2015 Multithreading in Java Fondamenti di Sistemi Informativi 2014-2015 Multithreading La programmazione concorrente consente di eseguire più processi o thread nello stesso momento. Nel secondo caso si parla

Dettagli

Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002. Sistemi Operativi Corsi A e B.

Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002. Sistemi Operativi Corsi A e B. Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002 Sistemi Operativi Corsi A e B Esercitazione 15 Il problema dello Sleeping Barber E dato un salone di barbiere,

Dettagli

Nona Esercitazione. Thread e memoria condivisa Sincronizzazione tramite semafori

Nona Esercitazione. Thread e memoria condivisa Sincronizzazione tramite semafori Nona Esercitazione Thread e memoria condivisa Sincronizzazione tramite semafori Agenda Esercizio 1 DA SVOLGERE Sincronizzazione avanzata produttore consumatore tramite semafori Esercizio 2 DA SVOLGERE

Dettagli

Analisi e progettazione concorrente (esempi con Java) Analisi e progettazione concorrente. Task e thread

Analisi e progettazione concorrente (esempi con Java) Analisi e progettazione concorrente. Task e thread Bibliorafia e riferimenti,6 PRG % &RUVR GL,QJHJQHULD GHO 6RIWZDUH 80/ Analisi e proettazione concorrente (esempi con Java) - Hassan Gomaa: Desinin concurrent distributed and real time applications with

Dettagli

Sincronizzazione con Java

Sincronizzazione con Java Sincronizzazione con Java Corse critiche e sincronizzazione Java implementa un meccanismo simile al monitor per garantire la sincronizzazione fra thread Ogni oggetto ha un lock associato ad esso Nelle

Dettagli

Lab 1: Java Multithreading

Lab 1: Java Multithreading Dept. of Computer Science Lab 1: Java Multithreading Matteo Camilli matteo.camilli@unimi.it Laboratorio di Sistemi Operativi a.a. 2015/16 Università degli Studi di Bergamo 1 Outline Programmazione multithreading

Dettagli

Multithreading in Java I parte. Lorenzo Gallucci

Multithreading in Java I parte. Lorenzo Gallucci Multithreading in Java I parte Lorenzo Gallucci Java: un linguaggio ed un sistema predisposti per il multitasking È possibile creare e gestire Thread nativamente (senza dover ricorrere a librerie esterne)

Dettagli

Esercizi sui Thread. Esercitazione di Laboratorio di Programmazione di Rete A. Daniele Sgandurra 24/09/2008. Università di Pisa

Esercizi sui Thread. Esercitazione di Laboratorio di Programmazione di Rete A. Daniele Sgandurra 24/09/2008. Università di Pisa Esercizi sui Thread Esercitazione di Laboratorio di Programmazione di Rete A Daniele Sgandurra Università di Pisa 24/09/2008 Creare Thread: l Interfaccia Runnable Per eseguire un attività in un thread

Dettagli

Processi e Thread. Walter Cazzola Dipartimento di Informatica e Comunicazione Università à degli Studi di Milano.

Processi e Thread. Walter Cazzola Dipartimento di Informatica e Comunicazione Università à degli Studi di Milano. Processi e Thread Processi e Thread: Il Caso Java. Walter Cazzola Dipartimento di Informatica e Comunicazione Università à degli Studi di Milano. e-mail: cazzola@disi.unige.it Walter Cazzola Processi e

Dettagli

ASD: Sistemi Distribuiti (Prof. Scarano) 24/04/2002

ASD: Sistemi Distribuiti (Prof. Scarano) 24/04/2002 Organizzazione della lezione 8. Java: Eccezioni e Thread Vittorio Scarano Algoritmi e Strutture Dati: Sistemi Distribuiti Corso di Laurea in Informatica Università degli Studi di Salerno Le eccezioni come

Dettagli

Esercitazione 15. Il problema dello Sleeping Barber

Esercitazione 15. Il problema dello Sleeping Barber Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002 Sistemi Operativi Corsi A e B Esercitazione 15 Il problema dello Sleeping Barber E dato un salone di barbiere,

Dettagli

8. Java: Eccezioni e Thread

8. Java: Eccezioni e Thread 8. Java: Eccezioni e Thread Vittorio Scarano Algoritmi e Strutture Dati: Sistemi Distribuiti Corso di Laurea in Informatica Università degli Studi di Salerno Organizzazione della lezione Le eccezioni motivazioni

Dettagli

Decima Esercitazione. Accesso a risorse condivise tramite Monitor Java

Decima Esercitazione. Accesso a risorse condivise tramite Monitor Java Decima Esercitazione Accesso a risorse condivise tramite Monitor Java 1 Agenda Esempio 1 La banca: gestione di una risorsa condivisa da più thread, con politica prioritaria Esercizio 2 da svolgere Accesso

Dettagli

Trattamento delle Eccezioni Threads

Trattamento delle Eccezioni Threads Programmazione ad Oggetti e Una exception è una situazione anormale generata da una sequenza di codice a tempo di esecuzione (es. divisione per 0) Java runtime costruisce un oggetto di tipo Exception ogni

Dettagli

T 1. Per un processo con più thread di controllo, lo stato di avanzamento della computazione di ogni thread è dato da:

T 1. Per un processo con più thread di controllo, lo stato di avanzamento della computazione di ogni thread è dato da: Un thread (o processo leggero) è una attività, descritta da una sequenza di istruzioni, che esegue all'interno del contesto di esecuzione di un programma. Un thread procede nella sua esecuzione per portare

Dettagli

Programmazione Concorrente e Distribuita

Programmazione Concorrente e Distribuita Programmazione Concorrente e Distribuita Esame scritto del 22 Marzo 2012 Versione K Esercizio 1 (5 punti) Si consideri il codice seguente. 1 public c l a s s Redwood extends Tree { 2 public s t a t i c

Dettagli

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. - lezione 14 - Thread in Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008. - lezione 14 - Thread in Java Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A. 2007-2008 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it - lezione 14 - Thread in Java 1 Cos è un

Dettagli

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 20 Alberto Ceselli alberto.ceselli@unimi.it Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 20 Maggio 2010 Unità concorrenti in

Dettagli

Lab 2: Sincronizzazione diretta/indiretta in Java

Lab 2: Sincronizzazione diretta/indiretta in Java Dept. of Computer Science Lab 2: Sincronizzazione diretta/indiretta in Java Matteo Camilli matteo.camilli@unimi.it Laboratorio di Sistemi Operativi a.a. 2015/16 Università degli Studi di Bergamo 1 Esercizi

Dettagli

Lezione n.6 LPR A - INFORMATICA THREADS:, SINCRONIZZAZIONE ESPLICITA

Lezione n.6 LPR A - INFORMATICA THREADS:, SINCRONIZZAZIONE ESPLICITA Università degli Studi di Pisa Lezione n.6 LPR A - INFORMATICA THREADS:, SINCRONIZZAZIONE ESPLICITA 27/10/2008 1 THREADS COOPERANTI: IL MONITOR L'interazione esplicita tra threads avviene in un linguaggio

Dettagli

Introduzione: i thread. Laboratorio di programmazione di rete Java Thread! Esempio di thread C (dato per scontato)

Introduzione: i thread. Laboratorio di programmazione di rete Java Thread! Esempio di thread C (dato per scontato) Introduzione: i thread Laboratorio di programmazione di rete Java Thread! Corso B Anno accademico 2007-2008 Prof. Marco Danelutto Assistente Dr.ssa Sonia Campa Concetto di thread (richiami di laboratorio

Dettagli

Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1)

Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1) Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica A.A. 2001/2002 Corsi A e B Esercitazioni 7 e 8 Bounded Buffer con sincronizzazione Java (1) public class BoundedBuffer private

Dettagli

Esercizio sui Semafori

Esercizio sui Semafori Esercizio sui Semafori Allocazione di una risorsa con politica prioritaria (SJF) (v. Esercitazione 9, es.2) 1 Traccia (1/2) Si realizzi una applicazione Java che risolva il problema dell allocazione di

Dettagli

Sistemi operativi. Corso di Laurea Triennale in Ingegneria Informatica. Lezione 7 Mutex Condition Esempi di utilizzo

Sistemi operativi. Corso di Laurea Triennale in Ingegneria Informatica. Lezione 7 Mutex Condition Esempi di utilizzo Sistemi operativi ì Corso di Laurea Triennale in Ingegneria Informatica Lezione 7 Mutex Condition Esempi di utilizzo Domande sulle lezioni passate? Sommario ì Sincronizzazione ì Mutex ì Variabili condition

Dettagli

Decima Esercitazione. Accesso a risorse condivise tramite Monitor Java

Decima Esercitazione. Accesso a risorse condivise tramite Monitor Java Decima Esercitazione Accesso a risorse condivise tramite Monitor Java 1 Agenda Esempio 1 La banca: gestione di una risorsa condivisa da più thread, con politica prioritaria Esercizio 2 da svolgere Accesso

Dettagli

Sincronizzazione con Java

Sincronizzazione con Java Sincronizzazione con Java Corse critiche e sincronizzazione Java implementa un meccanismo simile al monitor per garantire la sincronizzazione fra thread Ogni oggetto ha un lock associato ad esso Nelle

Dettagli

Multithreading in Java IS-8 1

Multithreading in Java IS-8 1 Multithreading in Java IS-8 1 Flusso (thread) di esecuzione In un programma sequenziale esiste un solo flusso di esecuzione attivo In un programma concorrente esistono più flussi di esecuzione attivi (task)

Dettagli

Thread in Java. Linguaggi e Laboratorio. - lezione 12 - Laurea in Ingegneria Telematica Università Kore di Enna A.A

Thread in Java. Linguaggi e Laboratorio. - lezione 12 - Laurea in Ingegneria Telematica Università Kore di Enna A.A Linguaggi e Laboratorio Laurea in Ingegneria Telematica Università Kore di Enna A.A. 2009-2010 Alessandro Longheu http://www.diit.unict.it/users/alongheu alessandro.longheu@diit.unict.it - lezione 12 -

Dettagli

Thread e Task. L20_MultiThread 2

Thread e Task. L20_MultiThread 2 I Thread in Java Thread e Task Multitasking: capacità dei sistemi operativi di eseguire più programmi contemporaneamente. Ciascun programma ha il proprio insieme di variabili, costanti, ecc. Multithreading

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA9 B2 Multithreading 1 Prerequisiti Programmazione base in Java Significato di multithreading Concetti di base sui sistemi operativi Attesa attiva Attesa passiva 2 1

Dettagli

I Thread in Java! parte 1!

I Thread in Java! parte 1! I Thread in Java! parte 1! 1 Thread Un thread è un singolo flusso sequenziale di controllo all interno di un processo(task) Un thread (o processo leggero) è un unità di esecuzione che condivide codice

Dettagli

Java threads (2) Programmazione Concorrente

Java threads (2) Programmazione Concorrente Java threads (2) emanuele lattanzi isti information science and technology institute 1/28 Programmazione Concorrente Utilizzo corretto dei thread in Java emanuele lattanzi isti information science and

Dettagli

Sistemi Operativi. Processi e thread

Sistemi Operativi. Processi e thread Sistemi Operativi Processi e thread A.A. 2018-2019 Processi (e thread) Modello concettuale Creazione di processi 1. System initialization 2. Execution of a process-creation system call by a running process

Dettagli

Multithreading in Java II parte. Lorenzo Gallucci

Multithreading in Java II parte. Lorenzo Gallucci Multithreading in Java II parte Lorenzo Gallucci Synchronized Parola chiave introdotta per gestire la mutua esclusione Utile per proteggere l accesso alle strutture dati critiche Induce una sincronizzazione

Dettagli

Programmazione Concorrente e Distribuita

Programmazione Concorrente e Distribuita Programmazione Concorrente e Distribuita Esame scritto del 29 Giugno 2012 Versione I Esercizio 1 ( punti) 1 class Mammal { 2 S t r i n g name = f u r r y ; 3 S t r i n g makenoise ( ) { return g e n e

Dettagli

Programmazione Concorrente e Distribuita

Programmazione Concorrente e Distribuita Programmazione Concorrente e Distribuita Esame scritto del 10 Gennaio 2012 Versione C Esercizio 1 (5 punti) 1 public class Tenor extends S i n g e r { 2 public s t a t i c S t r i n g s i n g ( ) { 3 return

Dettagli

SISTEMI OPERATIVI. Java multithreading. Prof. Luca Gherardi Prof.ssa Patrizia Scandurra (anni precedenti) (MODULO DI INFORMATICA II) LABORATORIO

SISTEMI OPERATIVI. Java multithreading. Prof. Luca Gherardi Prof.ssa Patrizia Scandurra (anni precedenti) (MODULO DI INFORMATICA II) LABORATORIO SISTEMI OPERATIVI (MODULO DI INFORMATICA II) LABORATORIO Java multithreading Prof. Luca Gherardi Prof.ssa Patrizia Scandurra (anni precedenti) Università degli Studi di Bergamo a.a. 2012-13 Sommario Programmazione

Dettagli

Gestione dei thread in Java LSO 2008

Gestione dei thread in Java LSO 2008 Gestione dei thread in Java LSO 2008 Cos è un Thread? Si può avere la necessità di suddividere un programma in sottoattività separate da eseguire indipendentemente l una dall altra Queste sottoattività

Dettagli

Esercizio monitor. Sistemi Operativi T 1

Esercizio monitor. Sistemi Operativi T 1 Esercizio monitor Si consideri un piccolo Aereoporto, nel quale sia presente una sola pista, utilizzata sia per i decolli che per gli atterraggi. La pista puo` anche essere percorsa da mezzi di servizio:

Dettagli

Programmazione in rete e laboratorio a.a. 2004/05

Programmazione in rete e laboratorio a.a. 2004/05 Programmazione in rete e laboratorio a.a. 2004/05 Thread Sinronizzazione Alberto Martelli Finora abbiamo visto esempi di thread indipendenti. In molti asi i thread si devono sinronizzare, sia per oordinarsi

Dettagli

Thread. Introduzione ai thread Modelli di programmazione I Thread di Java

Thread. Introduzione ai thread Modelli di programmazione I Thread di Java Thread Introduzione ai thread Modelli di programmazione I Thread di Java Thread Molti sistemi operativi forniscono il supporto per definire sequenze di controllo multiple all'interno di un singolo processo

Dettagli

Programmazione a oggetti

Programmazione a oggetti Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi piluc@dsi.unifi.it Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software

Dettagli

Corso di Reti di Calcolatori L-A

Corso di Reti di Calcolatori L-A Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 0 (svolta) Multithreading in Java Luca Foschini Anno accademico 2009/2010 Esercitazione 0 1 Modello

Dettagli