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

Dimensione: px
Iniziare la visualizzazioe della pagina:

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

Transcript

1 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 attività, di un thread! MA: non si aspetta che il servizio termini, esso procede in concorrenza a chi lo ha richiesto! Thread Un thread (lightweight process) è un singolo flusso sequenziale di controllo all interno di un processo Normale Richiesta di Servizio Richiesta di Servizio start() a un Thread Oggetto A Flusso di Esecuzione Oggetto A Attesa che Termini la Esecuzione di B.X() B.X() return Oggetto B Esecuzione del Metodo X in B Da qui in poi ci sono due flussi di esecuzione, l'oggetto A non aspetta che termini l'esecuzione dell'oggetto B B.start() Oggetto Thread B Esecuzione del Metodo run() in B Un thread: esegue all interno del contesto di esecuzione di un unico processo/programma NON ha uno spazio di indirizzamento riservato: tutti i thread appartenenti allo stesso processo condividono lo stesso spazio di indirizzamento ha execution stack e program counter privati

2 Java Thread Esempio di classe Simplethread che è sottoclasse di Thread (modalità 1): Due modalità per implementare thread in Java: 1. come sottoclasse della classe Thread 2. come classe che implementa l interfaccia Runnable 1) come sottoclasse della classe Thread Thread possiede un metodo run() che la sottoclasse deve ridefinire si crea un istanza della sottoclasse tramite new si esegue un thread chiamando il metodo start() che a sua volta richiama il metodo run() public class SimpleThread extends Thread { public SimpleThread(String str) { super(str); public void run() { for (int i = 0; i < 10; i++) { System.out.println(i + " " + getname()); try { sleep((int)(math.random()* 1000)); catch (InterruptedException e){ System.out.println("DONE! " + getname()); public class TwoThreadsTest { public static void main (String[] args) { new SimpleThread("Jamaica").start(); new SimpleThread("Fiji").start();

3 E se occorre definire thread che non siano necessariamente sottoclassi di Thread? Esempio di classe EsempioRunnable che implementa l interfaccia Runnable ed è sottoclasse di MiaClasse (modalità 2): 2) come classe che implementa l interfaccia runnable implementare il metodo run() nella classe creare un istanza della classe tramite new creare un istanza della classe Thread con un altra new, passando come parametro l istanza della classe che si è creata invocare il metodo start() sul thread creato, producendo la chiamata al suo metodo run() class EsempioRunnable extends MiaClasse implements Runnable { // non e sottoclasse di Thread public void run() { for (int i=1; i<=10; i++) System.out.println(i + + i*i); public class Esempio { public static void main(string args[]){ Interfaccia Runnable: maggiore flessibilità derivante dal poter essere sottoclasse di qualsiasi altra classe EsempioRunnable e = new EsempioRunnable(); Thread t = new Thread (e); t.start();

4 Il ciclo di vita di un thread Dead al termine naturale della sua esecuzione o dopo l invocazione del suo metodo stop() da parte di un altro thread Metodi per il controllo di thread Creato subito dopo l istruzione new le variabili sono state allocate e inizializzate; il thread è in attesa di passare allo stato di eseguibile Runnable thread è in esecuzione, o in coda d attesa per ottenere l utilizzo della CPU Not Runnable il thread non può essere messo in esecuzione dallo scheduler. Entra in questo stato quando in attesa di un operazione di I/O, o dopo l invocazione dei metodi suspend(), wait(), sleep() start() fa partire l esecuzione di un thread. La macchina virtuale Java invoca il metodo run() del thread appena creato stop() forza la terminazione dell esecuzione di un thread. Tutte le risorse utilizzate dal thread vengono immediatamente liberate (lock inclusi), come effetto della propagazione dell eccezione ThreadDeath suspend() blocca l'esecuzione di un thread in attesa di una successiva operazione di resume. Non libera le risorse impegnate dal thread (possibilità di deadlock)

5 resume() riprende l'esecuzione di un thread precedentemente sospeso. Se il thread riattivato ha una priorità maggiore di quello correntemente in esecuzione, avrà subito accesso alla CPU, altrimenti andrà in coda d'attesa sleep(long t) blocca per un tempo specificato (time) l'esecuzione di un thread. Nessun lock in possesso del thread viene rilasciato. join() blocca il thread chiamante in attesa della terminazione del thread di cui si invoca il metodo. Anche con timeout yield() sospende l'esecuzione del thread invocante, lasciando il controllo della CPU agli altri thread in coda d'attesa I metodi precedenti interagiscono ovviamente con il gestore della sicurezza della macchina virtuale Java (SecurityManager, checkaccess(), checkpermission()) Il problema di stop()e suspend() stop() e suspend() rappresentano azioni brutali sul ciclo di vita di un thread => rischio di determinare situazioni di blocco critico (deadlock) Infatti: se il thread sospeso aveva acquisito una risorsa in maniera esclusiva, tale risorsa rimane bloccata e non è utilizzabile da altri, perché il thread sospeso non ha avuto modo di rilasciare il lock su di essa se il thread interrotto stava compiendo un insieme di operazioni su risorse comuni, da eseguirsi idealmente in maniera atomica, l interruzione può condurre ad uno stato inconsistente del sistema JDK 1.2, pur supportandoli ancora per ragioni di back-compatibility, sconsiglia l utilizzo dei metodi stop(), suspend() e resume() (metodi deprecated) Altri metodi fondamentali per le operazioni di sincronizzazione fra thread Java: wait(), notify(), notifyall() (vedi lucido 11 e seguenti) Si consiglia invece di realizzare tutte le azioni di controllo e sincronizzazione fra thread tramite i metodi wait() e notify() su variabili condizione (astrazione di monitor)

6 Priorità dei thread in Java Scheduling: esecuzione di una molteplicità di thread su una singola CPU, in un qualche ordine Macchina virtuale Java (JVM) Fixed Priority Scheduling algoritmo di scheduling molto semplice e deterministico JVM sceglie il thread in stato runnable con priorità più alta Se più thread in attesa di eseguire hanno uguale priorità, la scelta della JVM avviene con una modalità di tipo round-robin. La classe Thread fornisce i metodi: setpriority(int num) getpriority() con valori di num compresi fra MIN_PRIORITY e MAX_PRIORITY (costanti definite anch esse nella classe Thread) Il thread messo in esecuzione dallo scheduler viene interrotto se e solo se: un thread con priorità più alta diventa runnable; il metodo run termina l esecuzione o il thread esegue un yield; il quanto di tempo assegnato si è esaurito (solo su sistemi che supportano time-slicing, come Windows95/NT) public void run() { while (tick < ) { tick++; if ((tick % 50000) == 0) System.out.println("Thread #" + num + ", tick = " + tick); Time-Sliced System Non Time-Sliced System Thread #1, tick = Thread #0, tick = Thread #0, tick = Thread #1, tick = Thread #1, tick = Thread #1, tick = Thread #0, tick = Thread #0, tick = Thread #0, tick = Thread #0, tick = Thread #0, tick = Thread #0, tick = Thread #1, tick = Thread #1, tick = Thread #1, tick = Thread #1, tick =

7 SINCRONIZZAZIONE di THREADS Quando due o più thread eseguono concorrentemente, è in generale impossibile prevedere l'ordine in cui le loro istruzioni verranno eseguite. Problemi nel caso in cui i thread invocano metodi sullo stesso oggetto di cui condividono il riferimento. SONO POSSIBILI INCONSISTENZE! Esempio: Oggetto conto_corrente con metodo versamento(importo) \ public void versamento(int importo) { int nuovo_totale; //variabile locale nuovo_totale = totale_conto + importo - tasse; //totale_conto è una variabile dell'oggetto //e indica i soldi totali sul conto //l'istruzione sopra calcola in nuovo totale del // conto corrente mettendo il risultato nella //variabile locale totale_conto = nuovo_totale; // metto il totale calcolato nella variabile //dell'oggetto che memorizza il conto totale Supponiamo che due thread abbiano entrambi un riferimento all'oggetto invochino separatamente il metodo versamento per fare ognuno un versamento sul conto. ESEMPIO DI INCONSISTENZA Supponiamo che l'oggetto conto_corrente abbia nella sua variabile totale_conto il valore Ci si aspetta che se qualcuno deposita 500 e qualcun altro deposita 1000, e supponendo che le tasse per ogni versamento siano 100, alla fine la variabile totale_conto valga Supponiamo che questi due depositi vengano fatti in concorrenza da due thread diversi e che durante l'esecuzione i thread si alternino sul processore, come segue Thread A Thread B conto_corrente.versamento(1000) // il thread invoca il metodo e il flusso di esecuzione fa a eseguire le istruzioni di tale metodo nuovo_totale= totale_conto+importo-tasse; //nuovo_totale = totale_conto =nuovo_totale; //totale_conto vale 2900 Alla fine, totale_conto vale 2400!!!! Il metodo versamento() non è atomico conto_corrente.versamento(500) // il thread invoca il metodo e il flusso di esecuzione fa a eseguire le istruzioni di tale metodo nuovo_totale= totale_conto+importo-tasse; //nuovo_totale = totale_conto = nuovo_totale; //totale_conto vale 2400

8 Mutua Esclusione Differenti thread che fanno parte della stessa applicazione Java condividono lo stesso spazio di memoria è possibile che più thread accedano contemporaneamente allo stesso metodo o alla stessa sezione di codice di un oggetto per accedere a un metodo o una sezione synchronized, un thread deve prima acquisire il lock dell oggetto il lock è automaticamente rilasciato quando il thread esce dalla sezione synchronized, o se viene interrotto da un eccezione un thread che non riesce ad acquisire un lock rimane sospeso sulla richiesta della risorsa fino a che il lock non è disponibile Servono meccanismi di mutua esclusione sull accesso al metodo e alla sezione di codice condivisa JVM supporta la mutua esclusione nell accesso a risorse condivise tramite la keyword synchronized NOTA: ad ogni oggetto contenente metodi o blocchi synchronized viene assegnata una sola variabile condizione Due thread non possono accedere contemporaneamente a due sezioni synchronized diverse di uno stesso oggetto synchronized su: singolo metodo, o blocco di istruzioni In pratica: a ogni oggetto Java è automaticamente associato un lock

9 ESEMPIO Lettura Dati da Socket... public class AsyncReadSocket extends Thread { private Socket s; private StringBuffer result; public AsyncReadSocket(Socket s) { this.s=s; result=new StringBuffer(); public void run(){ DataInputStream is=null; try { is=new DataInputStream(s.getInputStream()); catch (Exception e) { while (true) { try { char c=is.readchar(); result.append(c); catch (Exception e) { public String getresult { //metodo usato da un altro thread per leggere la stringa letta dalla socket String retval=result.tostring(); result=new StringBuffer(); return retval; Problemi: 1. che cosa accade se un thread chiama il metodo getresult() nello stesso momento in cui il metodo readchar() ritorna con i dati? Esempio di sequenza e di corsa critica: Thread A Thread AsynchReadSocket 1. getresult() 2. String retval=result.tostring(); 5. result=new StringBuffer() 3. Ritorno da readchar() 4. result.append(c) I dati appesi a result al passo 4 vanno persi; non sono stati, infatti ritrovati dal Thread A al passo 2 e al passo 5 Thread A assegna result ad un nuovo StringBuffer (vuoto) Un caso di corsa critica si verifica nell accesso a result in due casi: 1. Thread A chiama getresult() e Thread AsynchReadSocket esegue is.readchar e result.append 2. due thread chiamano contemporaneamente getresult()

10 ESEMPIO MODIFICATO... public class AsyncReadSocket extends Thread { private Socket s; private StringBuffer result; public AsyncReadSocket(Socket s) { this.s=s; result=new StringBuffer(); public void run(){ DataInputStream is=null; try { is=new DataInputStream(s.getInputStream()); catch (Exception e) { while (true) { try { char c=is.readchar(); appendresult(c); catch (Exception e) { public synchronized String getresult { String retval=result.tostring(); result=new StringBuffer(); return retval; public synchronized void appendresult(char c){ result.append(c) 1. se avessimo definito come sychronized solo getresult() e non appendresult()? => non avremmo risolto i problemi di corsa critica 2. e se definissimo run() come metodo synchronized? La mutua esclusione durerebbe all infinito e due Thread di tipo AsynchReadSocket non potrebbero eseguire concorrentemente

11 ESEMPIO - Uno stack sincronizzato class EmptyStackException extends Exception { EmptyStackException() { EmptyStackException(String s) { super(s); class Stack { Object val[]; int sp = 0; Stack(int max) { val = new Object[max]; public synchronized void push(object e) { val[sp++]=e; public synchronized Object pop() throws EmptyStackException { if (sp>0) return val[--sp]; else throw new EmptyStackException(); public boolean isempty() { return (sp==0); public void print() { System.out.print("Stack content: ["); for(int i=0; i<sp-1; i++) System.out.print(val[i] + ", "); if (sp>0) System.out.print(val[sp-1]); System.out.print("]"); ESEMPIO - Uso dello stack Questo codice riunisce in sé tre attività diverse: il pusher (che inserisce nello stack dato 20 oggetti Integer), il popper (che li estrae), e il printer (che visualizza lo stato dello stack). Ogni istanza di MyBody9 si comporterà quindi o come pusher, o come popper, o come printer, a seconda del nome che le viene passato all atto della costruzione. class MyBody9 implements Runnable { String chisonoio; static Stack s = new Stack(100); // condiviso MyBody9(String name){ chisonoio = name; public void run(){ if (chisonoio.equals("pusher")) { for(int i=0; i<20; i++) { System.out.println( Thread.currentThread().getName() + " pushing " + i); s.push( new Integer(i) ); else if (chisonoio.equals("popper")) { try { Thread.sleep(500); catch (InterruptedException ee) { try { while(!(s.isempty())) System.out.println( Thread.currentThread().getName() + " popping " + s.pop()); catch (EmptyStackException e) { System.out.println( Thread.currentThread().getName() + " tried to pop an empty stack"); else /* sono il printer */ s.print();

12 ESEMPIO - Uso dello stack public class Esempio9 { public static void main(string args[]){ // creo tre istanze configurate diversamente MyBody9 b1 = new MyBody9("pusher"); MyBody9 b2 = new MyBody9("popper"); MyBody9 b3 = new MyBody9("printer"); // creo tre thread, uno per task da eseguire Thread t1 = new Thread(b1, "Produttore"); Thread t2 = new Thread(b2, "Consumatore"); Thread t3 = new Thread(b3, "Visualizzatore"); // ora attivo Produttore e Consumatore t2.start(); t1.start(); // e aspetto che finiscano entrambi try { t1.join(); catch(interruptedexception e1) { try { t2.join(); catch(interruptedexception e2) { // alla fine attivo il Visualizzatore t3.start(); Esempio (Lettori - Scrittori): Classe che modella un DB (l implementazione è semplice: il DB è rappresentato da un intero) class Rwbasic { protected int data=0; //the database public void read(){ System.out.println( read: +data); public void write(){ data++; System.out.println( wrote: +data); NOTA: a rigore, esiste ancora un rischio di inconsistenza sugli oggetti memorizzati nello stack, in quanto si memorizzano riferimenti: altri thread potrebbero fare riferimento agli stessi oggetti, e modificarli mentre sono memorizzati nello stack sarebbe più sicuro archiviare nello stack delle copie (cloni) degli oggetti anziché mantenere dei riferimenti

13 class Reader extends Thread { int rounds; Rwbasic rw; public Reader(int rounds, Rwbasic rw) { this.rounds=rounds; this.rw=rw; public void run(){ for (int i= 0; i< rounds; i++) { rw.read(); class Writer extends Thread { int rounds; Rwbasic rw; public Writer(int rounds, Rwbasic rw) { this.rounds=rounds; this.rw=rw; public void run(){ for (int i= 0; i< rounds; i++) { rw.write(); class Main { static Rwbasic rw = new Rwbasic(); public static void main(string[] args) { int rounds = Integer.parseInt(args[0], 10); new Reader(rounds, rw).start(); new Writer(rounds, rw).start(); => accesso concorrente alla variabile data! Esempio Produttori e Consumatori in Mutua Esclusione class Rwbasicexclusive extends Rwbasic { public synchronized read(){ System.out.println( read: +data); public synchronized void write(){ data++; System.out.println( wrote: +data); class Reader extends Thread { int rounds; Rwbasicexclusive rw; public Reader(int rounds, Rwbasicexclusive rw) { this.rounds=rounds; this.rw=rw; public void run(){ for (int i= 0; i< rounds; i++) { rw.read(); class Writer extends Thread { int rounds; Rwbasicexclusive rw; public Writer(int rounds, Rwbasicexclusive rw) { this.rounds=rounds; this.rw=rw; public void run(){

14 for (int i= 0; i< rounds; i++) { rw.write(); class Main { static Rwbasicexclusive rw; rw=new Rwbasicexclusive(); public static void main(string[] args) { int rounds = Integer.parseInt(args[0], 10); new Reader(rounds, rw).start(); new Writer(rounds, rw).start(); Sincronizzazione Mutua esclusione uso di lock (tramite keyword synchronized) Politiche di sincronizzazione nell accesso ad una risorsa condivisa uso di meccanismi di guardia e di variabili logiche di condizioni (tramite keyword synchronized e metodi wait() e notify())

15 Esempio (Controllore per un parcheggio di auto) Progettare un sistema di controllo per l ingresso ad un parcheggio per auto. Il sistema deve permettere alle auto di entrare solo quando il parcheggio non è pieno e non permette alle auto di uscire quando non ci sono auto nel parcheggio. Simulare l arrivo e l uscita di auto tramite threads. ARRIVALS arrive CARPARK CONTROL depart CARPARK DEPARTURES Threads: Arrivals, Departures (implementano Runnable). CarParkControl è la classe che fornisce il controllo nell accesso al parcheggio. class CarParkControl { protected int spaces; protected int capacity; CarParkControl(int capacity) {capacity = spaces = n; synchronized void arrive() { --spaces; synchronized void depart() { ++spaces; class Arrivals implements Runnable { CarParkControl carpark; Arrivals(CarParkControl c) {carpark = c; public void run() { try { while(true) { carpark.arrive(); catch (InterruptedException e){

16 e le variabili condizione? class CarParkControl { protected int spaces; protected int capacity; CarParkControl(int capacity) {capacity = spaces = n; synchronized void arrive() throws InterruptedException { while (spaces==0) wait(); --spaces; notify(); synchronized void depart() throws InterruptedException { while (spaces==capacity) wait(); ++spaces; notify(); Ogni oggetto Java (istanza di una sottoclasse qualsiasi della classe Object) fornisce i metodi di sincronizzazione: wait() blocca l esecuzione del thread invocante in attesa che un altro thread invochi i metodi notify() o notifyall() per quell oggetto. Il thread invocante deve essere in possesso del lock sull oggetto (ossia la wait() deve essere eseguita all interno di un metodo o sezione synchronized); il suo blocco avviene dopo aver rilasciato il lock. Il thread riacquisisce il lock prima di ritornare dal metodo wait() per evitare situazioni di corsa critica. Anche varianti con specifica di timeout notify() risveglia un unico thread in attesa sul monitor dell oggetto in questione. Se più thread sono in attesa, la scelta avviene in maniera arbitraria, dipendente dall implementazione della macchina virtuale Java. Il thread risvegliato compete con ogni altro thread, come di norma, per ottenere la risorsa protetta. Anche la notify deve essere chiamata all interno di un metodo synchronised. notifyall()

17 esattamente come notify(), ma risveglia tutti i thread in attesa per l oggetto in questione. È necessario tutte le volte in cui più thread possono essere sospesi su differenti sezioni critiche dello stesso oggetto (unica coda d attesa) Altro Esempio: g i n J a v a public class GuardedBoundedBuffer implements Buffer { private List data; private final int capacity; public GuardedBoundedBuffer(int capacity) { data = new ArrayList(capacity); this.capacity = capacity; public synchronized Object take() throws Failure { while (data.size() == 0) try { wait(); catch(interruptedexception ex) {throw new Failure(); Object temp = data.get(0); data.remove(0); notifyall(); return temp; public synchronized void put(object obj) throws Failure { while (data.size() == capacity) try { wait(); catch(interruptedexception ex) {throw new Failure(); data.add(obj); notifyall(); public synchronized int size() { return data.size(); public int capacity() { return capacity;

18 Potrebbero wait() e notify() essere usati in sostituzione dei metodi synchronized? NO!!! Se non vengono chiamati dentro metodi synchronized si verificano possibili corse critiche. Esempio di corsa critica in presenza di due thread: 1. il primo thread testa una condizione e verifica che che la condizione non è verificata 2. il secondo thread modifica la condizione rendendola vera per il primo thread 3. il secondo thread chiama una notify() che pero non produce alcun effetto sul primo thread perché non ha ancora chiamato la wait() 4. il primo thread a questo punto chiama la wait() e si sospende all infinito => occorrono i lock di sincronizzazione. La wait è realizzata in modo da rilasciare il lock prima di mettersi in attesa e di riacquisirlo prima di ritornare dalla wait Produttori e Consumatori Concorrenti Possibili Politiche di Accesso se ci sono dei lettori già attivi sulla risorsa, puo un altro thread lettore accedere anche se c è già uno scrittore sospeso? se sulla risorsa è attivo uno scrittore e in attesa ci sono lettori e scrittori, a chi dare la precedenza? Ai lettori? Agli scrittori? Al primo che ha fatto la richiesta? Random? In maniera alternata? Esempio: class ReadersWriters extends Rwbasic { private int nr=0; private synchronized void startread(){ nr++; public synchronized void endread(){ nr--; if (nr==0) notify(); // sveglia i Writers in attesa // il metodo read non è piu synchronized public void read(){ startread(); System.out.println( wrote +data); endread();

19 public synchronized void write(){ while (nr>0) try { wait(); catch (InterruptedException ex) {return; data++; System.out.println( wrote +data); notify; class Reader extends Thread { int rounds; ReadersWriters rw; public Reader(int rounds, ReadersWriters rw) { this.rounds=rounds; this.rw=rw; public void run(){ for (int i= 0; i< rounds; i++) { rw.read(); class Writer extends Thread { int rounds; ReadersWriters rw; public Writer(int rounds, ReadersWriters rw) { this.rounds=rounds; this.rw=rw; public void run(){ for (int i= 0; i< rounds; i++) { rw.write(); class Main { static ReadersWriters rw; rw=new ReadersWriters (); public static void main(string[] args) { int rounds = Integer.parseInt(args[0], 10); new Reader(rounds, rw).start(); new Writer(rounds, rw).start(); A chi viene data la priorità nell accesso alla risorsa condivisa (variabile data)? Ai lettori

20 Variante: public abstract class RW { protected int activereaders = 0; protected int activewriters = 0; protected int waitingreaders = 0; protected int waitingwriters = 0; public void read() { beforeread(); try { doread(); finally { afterread(); public void write(){ beforewrite(); try { dowrite(); finally { afterwrite(); C o n c t P r o g r a n g i n J a v a protected synchronized void beforeread() { ++waitingreaders; while (!allowreader()) try { wait(); catch (InterruptedException ex) {... --waitingreaders; ++activereaders; protected abstract void doread(); protected synchronized void afterread() { --activereaders; notifyall(); protected boolean allowreader() { return waitingwriters == 0 && activewriters == 0; protected boolean allowwriter() { return activereaders == 0 && activewriters == 0;

21 C o n c u r t P r o g r a n J a v a protected synchronized void beforewrite() { ++waitingwriters; while (!allowwriter()) try { wait(); catch (InterruptedException ex) {... --waitingwriters; ++activewriters; protected abstract void dowrite(); protected synchronized void afterwrite() { --activewriters; notifyall();

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

THREAD IN JAVA. Come si può realizzare il concetto di Thread in Java?

THREAD IN JAVA. Come si può realizzare il concetto di Thread in Java? THREAD IN JAVA Come si può realizzare il concetto di Thread in Java? NEL MODO PIÙ NATURALE! Sono oggetti particolari ai quali si richiede un servizio (chiamato start()) corrispondente al lancio di una

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

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

PROCESSI ESEMPIO THREAD. RETI DI CALCOLATORI Linguaggio Java: i Thread CORSO DI. Università degli Studi di Modena e Reggio Emilia

PROCESSI ESEMPIO THREAD. RETI DI CALCOLATORI Linguaggio Java: i Thread CORSO DI. Università degli Studi di Modena e Reggio Emilia Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria CORSO DI RETI DI CALCOLATORI Linguaggio Java: i Thread Prof. Franco Zambonelli Lucidi realizzati in collaborazione con Ing. Enrico

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Implementazione Java di un ADT

Implementazione Java di un ADT Implementazione Java di un ADT Primo passo definire l'interfaccia (API) dell' ADT (l'api descrive i nomi dei metodi che l'adt supporta e come essi sono dichiarati e usati) Secondo passo scrivere il codice

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java

Variabili e Metodi di classe Interfacce e Package Gestione di File in Java Fondamenti di Informatica Variabili e Metodi di classe Interfacce e Package Gestione di File in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Variabili di classe: Static Una variabile di classe

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

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

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari

7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari 7 - Programmazione procedurale: Dichiarazione e chiamata di metodi ausiliari Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa

Dettagli

Esercizi di utilizzo del semaforo semplice di competizione per l'uso di una risorsa comune

Esercizi di utilizzo del semaforo semplice di competizione per l'uso di una risorsa comune Esercizi di utilizzo del semaforo semplice di competizione per l'uso di una risorsa comune a) Uso di una risorsa condivisa Siano P 1, P 2, P 3,, P k i processi che condividono l uso di una risorsa comune

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

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

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

Laboratorio di Sistemi Thread Java

Laboratorio di Sistemi Thread Java Premessa Fare più di una cosa contemporaneamente per noi è una cosa piuttosto comune. La vita quotidiana è piena di esempi che ci possono chiarire il significato dell'avverbio contemporaneamente. Ad esempio

Dettagli

Sistemi Operativi e Laboratorio, Prova del 6/4/2017 versione A

Sistemi Operativi e Laboratorio, Prova del 6/4/2017 versione A Nome: Cognome: Matricola: corso: fila: posto: Esercizio 1 (5 punti) Si consideri un processore che dispone dei registri speciali PC (program counter) e PS (program status), dello stack pointer SP e dei

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

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

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

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

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

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

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

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013

Programmazione a Oggetti e JAVA. Prof. B.Buttarazzi A.A. 2012/2013 Programmazione a Oggetti e JAVA Prof. B.Buttarazzi A.A. 2012/2013 Sommario La ricorsione Metodi ricorsivi Esercizi proposti 16/01/2013 2 La ricorsione In Java ogni metodo può chiamare anche se stesso,

Dettagli

Programmazione con Java

Programmazione con Java Programmazione con Java Classi e istanze in Java Definizione di classe in Java A meno che non si usino classi già scritte da altri, prima di poter creare un qualsiasi oggetto devo creare la sua rappresentazione:

Dettagli

Gestione delle eccezioni

Gestione delle eccezioni Gestione delle eccezioni Raffaella Brighi, a.a. 2007/08 Ereditarietà Corso di Algoritmi e programmazione. A.A. 2007-08 CdL Operatore Informatico Giuridico. Casi di insuccesso Vi sono numerosi problemi

Dettagli

SEMAFORI SEMAFORI. Sul semaforo sono ammesse solo due operazioni (primitive)

SEMAFORI SEMAFORI. Sul semaforo sono ammesse solo due operazioni (primitive) SEMAFORI 1 SEMAFORI Variabile intera non negativa con valore iniziale >= 0 Al semaforo è associata una lista di attesa Qs nella quale sono posti i descrittori dei processi che attono l autorizzazione a

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

Insegnamento di Laboratorio di algoritmi e strutture dati

Insegnamento di Laboratorio di algoritmi e strutture dati Insegnamento di Laboratorio di algoritmi e strutture dati Roberto Posenato ver. 0.6, 31/01/2008 1 / 25 Si comincia... 1 Esigenza... Definizione Tipi di eccezioni Sollevare eccezioni Gestire le eccezioni

Dettagli

Le risorse. Alcune definizioni

Le risorse. Alcune definizioni Le risorse Dicesi risorsa un qualunque oggetto, fisico o logico, di cui un processo necessita per portare a termine la sua evoluzione. Poiché un processo evolve eseguendo istruzioni (procedure), una risorsa

Dettagli

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA2 2.1- Funzioni 1 Prerequisiti Programmazione elementare in Java Tecnica top-down Concetto matematico di funzione Compilazione e link di programmi Esecuzione di funzioni

Dettagli

Esercitazione 4 Programmazione Concorrente in Java

Esercitazione 4 Programmazione Concorrente in Java Esercitazione 4 Programmazione Concorrente in Java 1 I threads in Java Ogni programma Java contiene almeno un singolo thread, corrispondente all esecuzione del metodo main() sulla JVM. E possibile creare

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

Modelli di interazione tra processi

Modelli di interazione tra processi Modelli di interazione tra processi Modello a memoria comune (ambiente globale, global environment) Modello a scambio di messaggi (ambiente locale, message passing) 1 Modello a memoria comune Il sistema

Dettagli

Telematica II 17. Esercitazione/Laboratorio 6

Telematica II 17. Esercitazione/Laboratorio 6 Multitasking e Multithreading Telematica II 17. Esercitazione/Laboratorio 6 Multitasking si riferisce all abilità di un computer di eseguire processi (jobs) multipli in maniera concorrente si ricorda che

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

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni

Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizi riassuntivi (Fondamenti di Informatica 2 Walter Didimo) Soluzioni Esercizio 1 Dire quale è la complessità temporale del seguente metodo, espressa con notazione asintotica O(.) (con la migliore

Dettagli

Riepilogo sulla Concorrenza

Riepilogo sulla Concorrenza Riepilogo sulla Concorrenza Passi per la costruzione di un programma concorrente Prima di tutto, definire se la concorrenza avviene mediante Processi concorrenti o Thread concorrenti Definizione delle

Dettagli

Esercizio: Lista Circolare

Esercizio: Lista Circolare Esercizio: Lista Circolare Si realizzi in Java un gestore di una lista circolare. La dimensione minima della lista è 2 elementi (ed è anche la dimensione iniziale). La dimensione massima è 20 elementi.

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

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

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

Metodi statici. Dichiarazione e chiamata di metodi statici

Metodi statici. Dichiarazione e chiamata di metodi statici Metodi statici Dichiarazione e chiamata di metodi statici Cos è un metodo Un metodo è un blocco di istruzioni che fornisce una funzionalità e viene identificato con un nome Può avere dei parametri ed un

Dettagli

Programmazione, 5 a lezione

Programmazione, 5 a lezione Programmazione, 5 a lezione Eugenio Omodeo Dipartimento di Matematica e Informatica, Università degli Studi di Trieste. Trieste, 12.10.2010 Esecuzione sequenziale I All avvio di un programma, il processo

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

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

Chiamata di procedura remota

Chiamata di procedura remota Con gli strumenti gia` visti, si puo` realizzare come segue: lato chiamante: send asincrona immediatamente seguita da una receive lato chiamato: una receive seguita, al termine dell azione richiesta, da

Dettagli

Monitor [Hoare 74] Costrutto sintattico che associa un insieme di procedure/funzioni (entry) ad una struttura dati comune a più processi.

Monitor [Hoare 74] Costrutto sintattico che associa un insieme di procedure/funzioni (entry) ad una struttura dati comune a più processi. Monitor [Hoare 74] Costrutto sintattico che associa un insieme di procedure/funzioni (entry) ad una struttura dati comune a più processi. Il compilatore può verificare che esse siano le sole operazioni

Dettagli

Monitor [Hoare 74] Uso del monitor

Monitor [Hoare 74] Uso del monitor Monitor [Hoare 74] Costrutto sintattico che associa un insieme di procedure/funzioni (entry) ad una struttura dati comune a più processi. Il compilatore può verificare che esse siano le sole operazioni

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

Operazioni di I/O. Schema di collegamento fra dispositivi periferici e CPU

Operazioni di I/O. Schema di collegamento fra dispositivi periferici e CPU Operazioni di I/O 1 Schema di collegamento fra dispositivi periferici e CPU Memoria CPU buffer interfaccia Registro di controllo Registro Di stato Unità di controllo Dispositivo fisico 2 1 Unità di interfaccia

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

Introduzione al Multithreading

Introduzione al Multithreading Introduzione al Multithreading Claudia Calidonna Istituto di di Cibernetica C.N.R. Argomenti principali Parleremo di : Processi & Threads Operazioni sui threads ed eventuali confronti tra operazioni sui

Dettagli