Concorrenza e sincronizzazione

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Concorrenza e sincronizzazione"

Transcript

1 Concorrenza e sincronizzazione Ingegneria del software Ing. Jody Marca jody.marca@polimi.it

2 Cosa faremo oggi 2 Concorrenza Sincronizzazione

3 Concorrenza 3 Nei programmi Java fino ad ora sviluppati è presente solo un flusso di esecuzione sequenziale. La concorrenza ci permette di gestire nel medesimo programma più flussi di esecuzione La concorrenza è fondamentale per creare applicazioni interattive o client server multiutente

4 I Thread 4 La concorrenza si può ottenere attraverso una gestione multi-processo o multi-thread Solitamente si usano i thread poiché sono più leggeri e utilizzano una comunicazione a memoria condivisa In Java un thread può essere creato utilizzando uno dei seguenti metodi Estensione della classe java.lang.thread Implementazione dell intefaccia java.lang.runnable

5 Thread Estensione della classe Thread 5 Definire una classe che estende la classe Thread e contiene un metodo run() public class SimpleThreadMode1 extends Thread { public void run() { //Contiene il codice che eseguirà il thread Istanziare la classe SimpleThreadMode1 thread = new SimpleThreadMode1(); Avviare il thread chiamando il metodo start() il quale richiamerà il metodo run() definito nel thread thread.start();

6 Thread Implementazione dell interfaccia Runnable 6 Definire una classe che implementa l interfaccia Runnable e contiene un metodo run() public class SimpleThreadMode2 implements Runnable { public void run() { //Contiene il codice che eseguirà il thread Instanziare la classe SimpleThreadMode2 runtask = new SimpleThreadMode2(); Instanziare un thread Thread thread = new Thread(runTask); Avviare il thread chiamando il metodo start() il quale richiamerà il metodo run() definito nel thread thread.start();

7 Aspettare il termine di un thread 7 Alcune azioni necessitano una certa serializzazione nell avvio dei thread. public class SimpleThreadJoin implements Runnable { public void run() { System.out.println("Ciao sono il thread" ); for(int i=0; i<10; i++){ System.out.println("thread - stampa numero: "+(i+1)); try { Thread.sleep(500); catch (InterruptedException e) { System.out.println("thread - Termino");

8 Aspettare il termine di un thread / 2 8 public static void main(string[] args) { SimpleThreadJoin threadtask = new SimpleThreadJoin(); Thread thread = new Thread(threadTask); thread.start(); try { thread.join(); //Attendo che termini il thread catch (InterruptedException e) { System.out.println("Creazione dei threads terminata");

9 Interrupts 9 Gli Interrupts sono utilizzati per bloccare alcune azioni che sta eseguendo un thread. public class SimpleThreadInterrupt implements Runnable { public void run() { System.out.println("Ciao sono il thread ); try { Thread.sleep(5000); catch (InterruptedException e) { System.out.println("thread - Ricevuto un interrupt"); System.out.println("thread - Termino");

10 Interrupts \ 2 10 public static void main(string[] args) { SimpleThreadInterrupt threadtask = new SimpleThreadInterrupt(); Thread thread = new Thread(threadTask); thread.start(); System.out.println("Creazione del thread terminata"); try { Thread.sleep(1000); catch (InterruptedException e) { System.out.println("Lancio interrupt al thread"); thread.interrupt();

11 Sincronizzazione 11 Sappiamo che l esecuzione di più threads concorrenti non è deterministica. Cosa succede se dobbiamo gestire dei dati condivisi tra più thread??? È necessario introdurre un meccanismo di Lock che ci permetta di essere sicuri che l accesso alla modifica dei dati condivisi sia effettuato in modo mutuamente esclusivo

12 Sincronizzazione / 2 12 Dobbiamo implementare un accesso esclusivo ai dati. Java ci fornisce la possibilità di sincronizzare l accesso dei thread a dei metodi o a determinate porzioni di codice Immaginiamo di implementare la cassa del progetto magazzino implementato nella prima lezione e di gestire i diversi utenti del magazzino utilizzando dei Thread Dobbiamo assicurare che le operazioni siano di modifica del saldo siano sincronizzate

13 Synchronized 13 Utilizziamo la parola chiave synchronized per sincronizzare l accesso ai metodi public class Cassa { private Double saldo = null; public Cassa(Double saldo) { this.saldo = saldo; public synchronized void vendi(double daversare){ saldo = saldo + daversare; public synchronized void acquista(double daprelevare){ saldo = saldo daprelevare;

14 Synchronized /2 14 La parola chiave synchronized permette un accesso sincronizzato a tutti e solo i metodi definiti synchronized Ci garantisce quindi che se un thread sta accedendo a un metodo synchronized nessun altro thread possa accedere a qualsiasi metodo synchronized della classe stessa. Non ci garantisce pero che non possa accedere in modo concorrente ad altri metodi della classe non definiti synchronized. I costruttori non possono essere synchronized

15 Synchronized Statements 15 Un altro modo di gestire la sincronizzazione in Java è utilizzare dei Synchronized Statements In questo caso è necessario dichiarare l oggetto su si vuole porre il lock. I Synchronized Statements sono utili per implementare una gestione della sincronizzazione a granularità più fine Usate i Synchronized Statements con cura dovete essere assolutamente sicuri di ciò che state facendo

16 Synchronized Statements - Esempio 1 16 Eliminiamo synchronized dai metodi della classe cassa sostituendoli con i Synchronized Statements public void vendi(double daversare){ Double saldopre = null, saldopost = null; synchronized(this) { saldopre = saldo; saldo = saldo + daversare; saldopost = saldo; System.out.println("Venduto "+daversare+" saldo precedente "+saldopre+" attuale "+saldopost);

17 Synchronized Statements - Esempio 2 17 Immaginiamo ora di dover gestire due variabili che permettano di memorizzare il totale delle vendite e degli acquisti. Non è necessario porre il lock su tutta la classe ma è sufficiente sincronizzare le letture e le scritture relative ad ogni singola variabile

18 Synchronized Statements - Esempio 2 /2 18 public class CassaSynchronizedStatements2 { private Double vendite = null, acquisti = null; //Definisco i lock da utilizzare per l aggiornamento delle variabili private Object lockvendite = null, lockacquisti = null; public CassaSynchronizedStatements2(Double vendite, Double acquisti) { this.vendite = vendite; this.acquisti = acquisti; //Inizializzo gli oggetti da utilizzare come lock lockvendite = new Object(); lockacquisti = new Object();

19 Synchronized Statements - Esempio 2 /3 19 public void vendi(double daversare){ //Sincronizzo le operazioni sulle vendite synchronized(lockvendite) { vendite = vendite + daversare; public void acquista(double daprelevare){ //Sincronizzo le operazioni sugli acquisti synchronized(lockacquisti) { acquisti = acquisti + daprelevare;

20 Bloccare e risvegliare una esecuzione 20 Vogliamo inserire un vincolo sull acquisto: è possibile acquistare solo se il saldo è positivo Dobbiamo fare in modo che, qualora il saldo sia negativo, l azione di acquisto venga temporaneamente sospesa Per questo scopo si possono utilizzare i metodi: wait() interrompe temporaneamente l esecuzione notify() (o notifyall() ) risveglia l esecuzione

21 Esempio di Wait Notify 21 public class Cassa { private Double saldo =0.0; public synchronized void vendi(double daversare){ saldo = saldo + daversare; notifyall(); public synchronized void acquista(double daprelevare) throws Exception{ while((saldo daprelevare )<=0.0) wait(); saldo = saldo daprelevare;

22 Problemi di sincronizzazione - Deadlock 22 Il Deadlock si verifica quando due o più threads restano bloccati per sempre poiché si aspettano a vicenda Thread 1 Thread 2 public class ObjA{ private ObjB objb = null; synchronized void call(){ objb.call(); public class ObjB{ private ObjA obja = null; synchronized void call(){ obja.call();

23 Locking 23 Il locking mettere a disposizione uno strumento avanzato e potente che permette di sincronizzare l accesso in modo esclusivo a porzioni di codice Java A differenza dei comuni Synchronized statement attraverso l uso del locking è possibe tentare di acquisire il lock in modalità non bloccante attraverso l operazione trylock()

24 Esempio di Locking 24 public class SharedClass { private Lock lock = null; //dichiaro il Lock public SharedClass(){ this.lock = new ReentrantLock(); //inizializzo il Lock public void usarisorsa() throws InterruptedException { //provo ad acquisire il lock, se entro 5 secondi non lo ottengo // la funzione trylock ritorna false e continuo if(lock.trylock(5, TimeUnit.SECONDS)){ frammento di codice da eseguire in mutua esclusione

25 Riassumendo: ciclo di vita di un thread 25 notify notifyall start born ready fine I/O fine lock waiting wait running dead I/O lock blocked

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

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

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

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

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

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

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

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

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. 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

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

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

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

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

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

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

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

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

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 19 - Eccezioni Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso

Dettagli

Esercitazione maggio 2011

Esercitazione maggio 2011 Esercitazione 11 23 maggio 2011 Monitor in Java Esercizio 1 In un sito di interesse geologico e` possibile visitare una grotta sotterranea, raggiungibile soltanto attraverso uno stretto cunicolo. Per motivi

Dettagli

Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale. Anno Accademico 2012/2013

Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale. Anno Accademico 2012/2013 Laboratorio Reti di Calcolatori Laurea Triennale in Comunicazione Digitale Anno Accademico 2012/2013 Thread e processi Da software ci si attende la concorrenza. Java è stato progettato per supportare concorrenza

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

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

SISTEMI OPERATIVI. Sincronizzazione in Java (Monitor e variabili condizione in Java)

SISTEMI OPERATIVI. Sincronizzazione in Java (Monitor e variabili condizione in Java) SISTEMI OPERATIVI (MODULO DI INFORMATICA II) LABORATORIO Sincronizzazione in Java (Monitor e variabili condizione in Java) Prof. Luca Gherardi Prof.ssa Patrizia Scandurra (anni precedenti) Università degli

Dettagli

Esercitazioni Ingegneria del So2ware 8 Threads. Giordano Tamburrelli tamburrelli@elet.polimi.it h@p://giordano.webfacdonal.com

Esercitazioni Ingegneria del So2ware 8 Threads. Giordano Tamburrelli tamburrelli@elet.polimi.it h@p://giordano.webfacdonal.com Esercitazioni Ingegneria del So2ware 8 Threads Giordano Tamburrelli tamburrelli@elet.polimi.it h@p://giordano.webfacdonal.com 1 Flusso (thread) di esecuzione In un programma sequenziale esiste un solo

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 Concorrente in Java

Programmazione Concorrente in Java Programmazione Concorrente in Java Lorenzo Bettini Dip. Sistemi e Informatica, Univ. Firenze http://www.dsi.unifi.it/~bettini Ottobre 2005 Gestione dei Processi Un processo è un programma in esecuzione.

Dettagli

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica Esercitazioni di PROGETTAZIONE DEL SOFTWARE (Corsi di Laurea in Ingegneria Informatica ed Automatica ed Ingegneria

Dettagli

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Tecniche di Programmazione: Thread Parte a versione 1.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi

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

Lezione n.2b. Threads: Callable & Future. 6/10/2008 Vincenzo Gervasi

Lezione n.2b. Threads: Callable & Future. 6/10/2008 Vincenzo Gervasi Università degli Studi di Pisa Dipartimento di Informatica Lezione n.2b LPR-A-09 Threads: Callable & Future 6/10/2008 Vincenzo Gervasi Lezione U 2b: Callable & Future Vincenzo Gervasi 1 CALLABLE E FUTURE

Dettagli

UNIVERSITÀ DEGLI STUDI DI BERGAMO

UNIVERSITÀ DEGLI STUDI DI BERGAMO UNIVERSITÀ DEGLI STUDI DI BERGAMO DIPARTIMENTO DI INGEGNERIA DELL INFORMAZIONE E METODI MATEMATICI Corso di Laurea in Ingegneria Informatica/Meccanica Esame di Sistemi Operativi a.a. 2008-09 (Modulo di

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

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

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

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

Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D. - 2012 1

Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D. - 2012 1 + Programmazione concorrente in Java 1 + Introduzione al multithreading 2 La scomposizione in oggetti consente di separare un programma in sottosezioni indipendenti. Oggetto = metodi + attributi finalizzati

Dettagli

Ingegneria del Software

Ingegneria del Software Ingegneria del Software Threads 2 Mauro Migliardi Ph. D. Sincronizzazione Start Programma per ATM Request Abbastanza grano? Deduci ammontare Stampa Ricevuta End Codice... public void withdraw(float amount)

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

Compute engine generici in RMI

Compute engine generici in RMI Compute engine generici in RMI Esempio: Calcolo del prodotto scalare Un unico server offre il servizio di calcolo del prodotto scalare tra vettori di interi Un client richiede al server il calcolo del

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

Lab 4: Locks, Condition Variables in Java

Lab 4: Locks, Condition Variables in Java Dept. of Computer Science Lab 4: Locks, Condition Variables in Java Matteo Camilli matteo.camilli@unimi.it Laboratorio di Sistemi Operativi a.a. 2015/16 Università degli Studi di Bergamo 1 Esercizi Lab3

Dettagli

Esercizio semafori Java

Esercizio semafori Java Esercizio semafori Java Esercizio di programmazione concorrente in Java Si vuole realizzare un sistema per la gestione delle transazioni commerciali relative a un mercato ortofrutticolo all ingrosso. Il

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

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi:

Programmazione. Cognome... Nome... Matricola... Prova scritta del 22 settembre 2014. Negli esercizi proposti si utilizzano le seguenti classi: Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 22 settembre 2014 TEMPO DISPONIBILE: 2 ore Negli

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

Esercizio sul Monitor in Java. 18 maggio 2011

Esercizio sul Monitor in Java. 18 maggio 2011 Esercizio sul Monitor in Java 18 maggio 2011 1 Il Bar dello Stadio In uno stadio e` presente un unico bar a disposizione di tutti i tifosi che assistono alle partite di calcio. I tifosi sono suddivisi

Dettagli

Informatica 3 secondo recupero 13 Settembre 2002

Informatica 3 secondo recupero 13 Settembre 2002 Informatica 3 secondo recupero 13 Settembre 2002 Nome (stampatello) Cognome (stampatello) Matr Recupero: Prima prova in itinere Seconda prova in itinere spazio per il docente Punteggi recupero prima prova

Dettagli

PROVA FINALE Ingegneria del software

PROVA FINALE Ingegneria del software PROVA FINALE Ingegneria del software Jody Marca jody.marca@polimi.it Laboratorio N 1 Contatti 2 Mail: jody.marca@polimi.it Interno: 7762 Ufficio 22 - secondo piano Materiale: www.cremona.polimi.it/dispense/ingsw

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

Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread

Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread Terza Esercitazione Unix System Call Exec Java Introduzione Thread Stefano Monti smonti@deis.unibo.it Unix - Esercizio 1 Scrivere un programma C con la seguente interfaccia:./compilaedesegui

Dettagli

Esercizi sul Monitor in Java

Esercizi sul Monitor in Java Esercizi sul Monitor in Java 1 I filosofi a cena (E. Dijkstra, 1965) 5 filosofi sono seduti attorno a un tavolo circolare; ogni filosofo ha un piatto di spaghetti tanto scivolosi che necessitano di 2 forchette

Dettagli

GESTIONE DEI PROCESSI

GESTIONE DEI PROCESSI Sistemi Operativi GESTIONE DEI PROCESSI Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in Java Concetto

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

Compute engine generici in RMI

Compute engine generici in RMI Compute engine generici in RMI Esempio: Calcolo del prodotto scalare Un unico server offre il servizio di calcolo del prodotto scalare tra vettori di interi Un client richiede al server il calcolo del

Dettagli

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO

OCA JAVA 7 SE PROGRAMMER I DOCENTE: DOTT. FAUSTO DELL ANNO CENTRO STUDI ULISSE Via Buccino, n. 22 - C.a.p. 84018 - Scafati (SA) Tel. Fax. 081.19970299-339.2365416-349.4152010 E-mail: info@centrostudiulisse.it - www.centrostudiulisse.it OCA JAVA 7 SE PROGRAMMER

Dettagli

Multithreading in Java

Multithreading in Java Multithreading in Java Un programma sequenziale (single thread) class ABC {. public void main(..) {.. begin body end 2 Un programmamultithreaded Main Thread start start start Thread A Thread B Thread C

Dettagli

I THREAD O PROCESSI LEGGERI

I THREAD O PROCESSI LEGGERI I THREAD O PROCESSI Processi (pesanti): LEGGERI entità autonome con poche risorse condivise (si prestano poco alla scrittura di applicazioni fortemente cooperanti) Ogni processo può essere visto come Immagine

Dettagli

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014

Programmazione. Cognome... Nome... Matricola... Prova scritta del 11 luglio 2014 Cognome................................ Nome................................... Matricola............................... Programmazione Prova scritta del 11 luglio 2014 TEMPO DISPONIBILE: 2 ore Negli esercizi

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

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

Multi-threading. I programmi Java possono eseguire thread multipli in modalità di concorrenza logica. Come funziona il multi-threading?

Multi-threading. I programmi Java possono eseguire thread multipli in modalità di concorrenza logica. Come funziona il multi-threading? Multi-threading I programmi Java possono eseguire thread multipli in modalità di concorrenza logica. Esecuzione di fatto simultanea, dati condivisi. Come funziona il multi-threading? Per l utente, più

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

Synchronized (ancora)

Synchronized (ancora) Synchronized (ancora) Riscriviamo l esempio di prima. Usiamo una struttura modulare, con una classe Notificatore che ha opportuni metodi. La classe ha due campi privati, la lista buftext e un suo thread.

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

Prova d Esame Compito A

Prova d Esame Compito A Domanda 1 A) Si richiede di analizzare le seguenti sezioni di codice. Il candidato indichi il risultato dell esecuzione del main. public class Father { private static int counter=0; private int code; public

Dettagli

Gruppi di Thread. Java threads (3) Gruppi di thread e Timer. Operating Systems. Operating Systems. Java threads 3. Java threads 3

Gruppi di Thread. Java threads (3) Gruppi di thread e Timer. Operating Systems. Operating Systems. Java threads 3. Java threads 3 Java threads (3) Gruppi di thread e Timer emanuele lattanzi isti information science and technology institute 1/12 Gruppi di Thread emanuele lattanzi isti information science and technology institute 2/12

Dettagli

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Ottava Esercitazione. introduzione ai thread java mutua esclusione Ottava Esercitazione introduzione ai thread java mutua esclusione Agenda Esempio 1 Concorrenza in Java: creazione ed attivazione di thread concorrenti. Esercizio 2 da svolgere Concorrenza in Java: sincronizzazione

Dettagli

19. Introduzione al multi-threading

19. Introduzione al multi-threading 19. Introduzione al multi-threading Marco Faella Dip. Ing. Elettrica e Tecnologie dell'informazione Università di Napoli Federico II Corso di Linguaggi di Programmazione II I thread I thread, o processi

Dettagli

Con il pulsante Start si introducono palline che rimbalzano in un area di disegno fino a che non è terminato il loro ciclo di vita (1000 movimenti).

Con il pulsante Start si introducono palline che rimbalzano in un area di disegno fino a che non è terminato il loro ciclo di vita (1000 movimenti). Rimbalzi. import java.awt.*; import java.awt.event.*; import java.applet.applet; public class Bounce extends Applet implements ActionListener { private Canvas canvas; private Button b1; private Button

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

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

GESTIONE DEGLI ERRORI

GESTIONE DEGLI ERRORI GESTIONE DEGLI ERRORI Spesso vi sono istruzioni critiche, che in certi casi possono produrre errori L approccio classico consiste nell inserire controlli (if else..) per cercare di intercettare a priori

Dettagli

Cosa sono i semafori?

Cosa sono i semafori? Semafori Cosa sono i semafori? I semafori sono primitive fornite dal sistema operativo per permettere la sincronizzazione tra processi e/o thread. Semafori di mutua esclusione con i thread POSIX 2 Operazioni

Dettagli

Esercizi RMI. Laboratorio di Programmazione di Rete A 5/12/2007. Esercitazione di Laboratorio

Esercizi RMI. Laboratorio di Programmazione di Rete A 5/12/2007. Esercitazione di Laboratorio Esercitazione di Laboratorio 5/12/2007 Sviluppare un applicazione RMI per la gestione di un elezione. Il server esporta un insieme di metodi: public void vota(string nome): accetta come parametro il nome

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 6 (svolta) Java RMI Luca Foschini Anno accademico 2010/2011 Esercitazione 6 1 Specifica: il Client

Dettagli

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni

FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria CORSO DI FONDAMENTI DI INFORMATICA C Linguaggio Java: Eccezioni Prof. Zambonelli, Ing. Cabri, Ing. Denti, Ing. Andrea Aime Zambonelli,

Dettagli

PROVA FINALE Ingegneria del software

PROVA FINALE Ingegneria del software PROVA FINALE Ingegneria del software Ing. Jody Marca jody.marca@polimi.it Laboratorio N 5 Cosa faremo oggi 2 Comunicazione tramite TCP socket Comunicazione tramite UDP socket RIPASSO: Input Output 3 In

Dettagli

Un esercizio d esame. Flavio De Paoli

Un esercizio d esame. Flavio De Paoli Un esercizio d esame e note sulla gestione dei dati Flavio De Paoli Il testo (Appello 22 ottobre 2001) Una stazione di servizio dispone di n distributori di benzina. I clienti si presentano a uno dei distributori

Dettagli

Laboratorio di Programmazione di Rete Corso A

Laboratorio di Programmazione di Rete Corso A Laboratorio di Programmazione di Rete Corso A Anno Accademico 2005-2006 Docente: Laura Ricci Assistente: Paolo Mori INFORMAZIONI UTILI Orario del Corso: Lunedì 9.00-11.00 Laboratorio Gruppo A 11.00-13.00

Dettagli

JAVA Gestione delle eccezioni e Programmazione concorrente

JAVA Gestione delle eccezioni e Programmazione concorrente JAVA Gestione delle eccezioni e Programmazione concorrente Andrea BEI (andrea.bei@libero.it) Gestione delle eccezioni Un eccezione è un evento generato in un applicazione in circostanze eccezionali (es:

Dettagli

Esercizi sul Monitor in Java. 22 Maggio 2015

Esercizi sul Monitor in Java. 22 Maggio 2015 Esercizi sul Monitor in Java 22 Maggio 2015 1 Il Bagno del Ristorante Si consideri la toilette di un ristorante. La toilette è unica per uomini e donne. Utilizzando Java, si realizzi un'applicazione concorrente

Dettagli

Esercizi sugli Oggetti Monitor

Esercizi sugli Oggetti Monitor Esercizi sugli Oggetti Monitor Esercitazione di Laboratorio di Programmazione di Rete A Daniele Sgandurra Università di Pisa 29/10/2008 Wait e Notify Ogni oggetto in Java ha un lock implicito. Il lock

Dettagli

Lezione 15 Programmazione multithreaded

Lezione 15 Programmazione multithreaded Lezione 15 Programmazione multithreaded Tutti i sistemi operativi, al giorno d'oggi, permettono di svolgere più operazioni simultaneamente. In questo momento, ad esempio, sto usando un word processor per

Dettagli

Soluzioni ai problemi di Mutua Esclusione Primitive di sincronizzazione. Soluzioni ai problemi di Mutua EsclusionePrimitive di sincronizzazione

Soluzioni ai problemi di Mutua Esclusione Primitive di sincronizzazione. Soluzioni ai problemi di Mutua EsclusionePrimitive di sincronizzazione Soluzioni ai problemi di Mutua Esclusione Primitive di sincronizzazione Soluzioni basate su primitive di sincronizzazione Le primitive di sincronizzazione piú comuni sono: Lock (mutex) - realizzati in

Dettagli

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale Fondamenti di Informatica - D. Talia - UNICAL 1 Lettura di dati da input In Java la lettura di dati da input

Dettagli

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali

Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali Classi astratte e progettazione OOP Esempio: l enciclopedia degli animali 1 Ereditarietà, polimorfismo e altri sporchi trucchi Facciamo un esempio che ci permette di comprendere come vengono utilizzate

Dettagli

Programmazione multi threaded in Python. Linguaggi dinamici A.A. 2010/2011 1

Programmazione multi threaded in Python. Linguaggi dinamici A.A. 2010/2011 1 Programmazione multi threaded in Python 1 Motivazione all'uso dei thread Pro Scrittura di applicazioni con molteplici eventi asincroni (GUI) Riduzione della latenza di servizio mediante l'uso di un pool

Dettagli

Politecnico di Milano

Politecnico di Milano Appello 5 febbraio 2016 Politecnico di Milano Anno accademico 2014-2015 Ingegneria del Software Cognome: DESIGN AND IMPLEMENTATION OF MOBILE APPLICATIONS 24 / 09 / 2015 Nome: Matricola: LAUREANDO Sezione

Dettagli

Programmazione concorrente e threads

Programmazione concorrente e threads Programmazione concorrente e threads Programmazione concorrente Un programma concorrente è un programma nel quale diverse computazioni possono essere eseguite allo stesso tempo Alcuni sistemi sono implicitamente

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

Introduzione all uso degli oggetti in Java (parte II) Walter Didimo

Introduzione all uso degli oggetti in Java (parte II) Walter Didimo Introduzione all uso degli oggetti in Java (parte II) Walter Didimo Esercizio all uso di oggetti Nel corso viene fornita una classe i cui oggetti permettono di leggere dati immessi dalla tastiera la classe

Dettagli

Il Sistema Operativo

Il Sistema Operativo Il Sistema Operativo Il sistema operativo Con il termine sistema operativo si intende l insieme di programmi e librerie che opera direttamente sulla macchina fisica mascherandone le caratteristiche specifiche

Dettagli

Definizione di classi. Walter Didimo

Definizione di classi. Walter Didimo Definizione di classi Walter Didimo Definizione di classi Fino ad ora abbiamo imparato a: creare oggetti da classi già pronte usare gli oggetti creati, invocando metodi la creazione e l uso di oggetti

Dettagli

Uguaglianza e copia di oggetti

Uguaglianza e copia di oggetti Uguaglianza e copia di oggetti Sommario 1. Classi Object e Class 2. Uguaglianza superficiale e uguaglianza profonda 3. Copia superficiale e copia profonda 4. Uguaglianza e copia in classi derivate 1 La

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

La concorrenza in Java package java.util.concurrent Antonio Furone

La concorrenza in Java package java.util.concurrent Antonio Furone La concorrenza in Java package java.util.concurrent Antonio Furone Coda Bloccante La classe LinkedTransferQueue è stata esplicitamente disegnata per dare supporto a problemi di tipo produttore/consumatore.

Dettagli

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata.

Chat. Si ha un server in ascolto sulla porta 4444. Quando un client richiede la connessione, il server risponde con: Connessione accettata. Chat Si ha un server in ascolto sulla porta 4444 Quando un client richiede la connessione, il server risponde con: Connessione accettata. Nome: Il client deve rispondere con lo user name A questo punto

Dettagli

Sincronizzazione. Soluzioni hardware Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Sincronizzazione. Soluzioni hardware Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino Sincronizzazione Soluzioni hardware Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino 2 Soluzioni hardware Le soluzioni hardware al problema della SC possono essere classificate

Dettagli