Programmazione concorrente in Java

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Programmazione concorrente in Java"

Transcript

1 Programmazione concorrente in Java

2 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 implementa il metodo run() Uno dei metodi piu importanti e il metodo start() che lancia il thread utilizzando il metodo run definito dall utente Ogni istanza di Thread deve quindi essere associata ad un metodo run Ci sono due metodi per realizzare un thread: Implementando l interfaccia Runnable L'interfaccia contiene il solo metodo public void run() Estendendo la classe java.lang.thread e sovrascrivendo il metodo run() Un thread termina quando Finisce Viene eseguito il metodo stop() del thread Scatta una eccezione Lo scheduling e effettuato tramite le priorita (metodo setpriority()) A parita di priorita round-robin

3 Multithreading in Java Creazione ed esecuzione di un Thread in Java: Thread t = new Thread(); t.start(); Questo thread non ha codice e si ferma subito. Come si indica il codice del Thread? Ci sono due modi: Mediante creazione subclass: public class MioThread extends Thread { System.out.println("Sono MioThread "); MioThread t = new MioThread(); t.start(); Mediante implementazione classe Runnable public class MioRunnable implements Runnable { System.out.println("Sono MioRunnable "); Thread t = new Thread(new MioRunnable()); t.start();

4 Multithreading mediante creazione subclass 1 import java.io.*; public class PingPong2{ // il main crea e lancia i thread public static void main(string[] a){ Ping2 c=new Ping2(); c.start(); Pong2 t=new Pong2(); t.start(); class Ping2 extends Thread{ try{ Thread.sleep(800); catch(interruptedexception e) { System.out.println("Ping"); class Pong2 extends Thread{ try{ Thread.sleep(990); catch (InterruptedException e){ System.out.println("\tPong");

5 Multithreading mediante creazione subclass 2 import java.io.*; public class PingPong3{ public static void main(string[] a){ Ping3 c=new Ping3(); Pong3 t=new Pong3(); class Ping3 extends Thread{ //ogni thread si lancia da solo try{ Thread.sleep(800); catch(interruptedexception e) { System.out.println("Ping"); Ping3(){ start(); class Pong3 extends Thread{ try{ Thread.sleep(990); catch (InterruptedException e){ System.out.println("\tPong"); Pong3(){ start();

6 Multithreading mediante implementazione Runnable 1 import java.io.*; public class PingPong{ //il main crea e lancia i thread public static void main(string[] a){ Ping c=new Ping(); Pong t=new Pong(); Thread th1=new Thread(c); th1.start(); Thread th2=new Thread(t); th2.start(); class Ping implements Runnable{ try{ Thread.sleep(800); catch(interruptedexception e) { System.out.println("Ping"); class Pong implements Runnable{ try{ Thread.sleep(990); catch (InterruptedException e){ System.out.println("\tPong");

7 Multithreading mediante implementazione Runnable 2 import java.io.*; public class PingPong1{ // file PingPong1.java public static void main(string[] a){ Ping1 c=new Ping1(); Pong1 t=new Pong1(); class Ping1 implements Runnable{ //file Ping1.java. Ogni oggetto crea e lancia il proprio thread Thread th; try{ Thread.sleep(800); catch(interruptedexception e) { System.out.println("Ping"); Ping1() {th=new Thread(this); th.start(); class Pong1 implements Runnable{ //file Pong1.java Thread th; try{ Thread.sleep(990); catch (InterruptedException e){ System.out.println("\tPong"); Pong1(){ th=new Thread(this); th.start();

8 In ogni caso, l uscita è: $ java PingPong2 Ping Pong Ping Pong Ping Pong... Non ci sono differenze rilevanti tra le due implementazioni!

9 Alcuni metodi di Thread public void start() //lancia il thread public void run() //esegue il codice public final void stop() //distrugge il thread public final void suspend() //sospende il thread public final void resume() //riattiva il thread public static void sleep(long n) //sospende il thread per n ms public final void setpriority(int priority) //modifica la priorita public final int getpriority() //ottiene la priorità corrente public static void yield() //rischedula public final native boolean isalive() //esce con true se il //thread è vivo

10 Suspend/Stop/Resume import java.io.*; class Ping implements Runnable{ try{ Thread.sleep(800); catch(interruptedexception e) { System.out.println("Ping"); public static void main(string[] a) throws Exception{ Ping c = new Ping(); Thread th1=new Thread(c); System.out.println("esegue"); th1.start(); System.out.println("sospende"); th1.suspend(); // fai qualcosa... Th1.resume();

11 Suspend/Stop/Resume import java.io.*; class Ping implements Runnable{ try{ Thread.sleep(800); catch(interruptedexception e) { System.out.println("Ping"); public static void main(string[] a) throws Exception{ Ping c = new Ping(); Thread th1=new Thread(c); System.out.println("stop"); th1.start(); th1.stop(); System.out.println("il thread e' stato fermato"); th1.join();

12 Suspend/Stop/Resume import java.io.*; class Ping implements Runnable{ try{ Thread.sleep(800); catch(interruptedexception e) { System.out.println("Ping"); public static void main(string[] a) throws Exception{ Ping c = new Ping(); Thread th1=new Thread(c); System.out.println("stop"); th1.start(); th1.suspend(); th1.resume();

13 Stop/Suspend/Resume Attenzione: Stop() e suspend(): rischio di deadlock!! Supponiamo che il thread avesse acquisito una risorsa in mutua esclusione! Dal JDK 1.2 stop(), suspend() e resume() deprecated Usare wait() e notify()! La JVM associa ad ogni oggetto che chiama l'istruzione synchronized un LOCK. Funzione della wait(): - rilascia il LOCK wait() deve essere inserita in un metodo synchronized - inserisce il thread in coda d'attesa - mette il thread in stato NotRunnable Esempio: Public synchronized void Esempio(){ if(!condizione) try { wait(); catch(interruptedexception e) {System.out.println("eccezione di wait!");

14 Setpriority/getpriority import java.io.*; class Ping implements Runnable{ //ricava la Priorita' del thread System.out.println( th.getname()+" attuale "+th.getpriority()); //cambia la priorita' th.setpriority(thread.max_priority); //ricava la Priorita' del thread System.out.println(th.getName()+" nuova "+th.getpriority()); public static void main(string[] a) throws Exception{ Ping c = new Ping(); Thread th1=new Thread(c); System.out.println("esegue"); th1.start();

15 Yeld import java.io.*; class Ping implements Runnable{ if ((i % 10) == 0) { System.out.println(Thread.currentThread().getName() + " sta trasferendo il controllo..."); Thread.yield(); public static void main(string[] a) throws Exception{ Ping c = new Ping(); Thread th1=new Thread(c); th1.start(); Ping c = new Ping(); Thread th1=new Thread(c); th1.start();

16 isalive import java.io.*; class Ping implements Runnable{ Thread th = Thread.currentThread(); //Tests if this thread is alive System.out.println(th.isAlive()); public static void main(string[] a) throws Exception{ Ping c = new Ping(); Thread th=new Thread(c); th.start(); th.join(); System.out.println(th.isAlive());

17 Stati di un Thread new Thread() yield() New thread start() Runnable suspend() sleep() wait() resume() notify() Not Runnable stop() stop() run() exit stop() Dead

18 Passaggio di parametri tra Thread Mediante visibilità delle variabili (attribuzione public static) Possibile solo per piccoli programmi import java.io.*; public class PingPong2{ // il main crea e lancia i thread public static int numero=0; public static void main(string[] a){ Ping2 c=new Ping2(); c.start(); Pong2 t=new Pong2(); t.start(); class Ping2 extends Thread{ try{ Thread.sleep(800); catch(interruptedexception e) { PingPong2.numero++; System.out.println("Ping "+PingPong2.numero); class Pong2 extends Thread{ try{ Thread.sleep(990); catch (InterruptedException e){ PingPong2.numero++; System.out.println("\tPong " +PingPong2.numero);

19 Passaggio di parametri tra Thread Tutti i thread devono condividere un oggetto, che contiene i dati e i metodi La condivisione viene effettuata mediante definizione del puntatore all oggetto in ciascun thread, e mediante l inizializzazione del puntatore all oggetto L oggetto in realta viene allocato nella classe principale (quella che contiene il main) Esempio: due thread p1 e p2 che si scambiano 5 reali, con ritardo (genera sequenzialita quindi in questo caso non ci sono problemi di mutua esclusione) public class pth{ public static void main(string[] a){ z buf=new z(); p1 c=new p1(buf); p2 t=new p2(buf); c.start(); t.start(); Definizione della classe z: import java.io.*; public class z{ float b[]= new float[10]; void put(int i, float f){ b[i]=f; float get(int i){ return(float)b[i];

20 Passaggio di parametri tra Thread Scrittura delle classi p1.java e p2.java public class p1 extends Thread{ z buf; p1(z buf){ this.buf=buf; try{ Thread.sleep(800); catch(interruptedexception e) { System.out.print("leggo "); for (int i=0; i<5; i++) System.out.print( "+buf.get(i)); System.out.println(); public class p2 extends Thread{ z buf; Random r=new Random(); p2(z buf){ this.buf=buf; try{ Thread.sleep(990); catch (InterruptedException e){ System.out.print("\tscrivo "); for(int i=0; i<5; i++) { buf.put(i,r.nextfloat()); System.out.print(" "+buf.get(i)); System.out.println();

21 Passaggio di parametri tra Thread In questo esempio si usano dei thread in Java che si scambiano dei dati mediante una classe condivisa, Buffer. La sincronizzazione e realizzata mediante algoritmo che attende se i puntatori di in e out sono coincidente. Attenzione: questa soluzione funziona solo con 1 produttore e 1 consumatore! Se ho piu produttori o piu consumatori, devo usare la mutua esclusione! Classe condivisa: import java.io.*; public class Buffer{ private int buf[]= new int[10]; private int in, out; Buffer(){ in=0; out=0; int get_in(){ return in; int get_out(){ return out; void put_in(int a){ in=a; void put_out(int b){ out=b; void put(int i, int f){ buf[i]=f; int get(int i){ return (int)buf[i];

22 Passaggio di parametri tra Thread Produttore: public class Prod extends Thread{ // produttore Buffer buf; Random r; Prod(Buffer p){ this.buf=p; r=new Random(); int val; val=r.nextint(); while (buf.get_out()==((buf.get_in()+1)%10)); buf.put(buf.get_in(),val); System.out.println("\nproduco "+val+" in="+buf.get_in()); buf.put_in((buf.get_in()+1)%10); Consumatore public class Cons extends Thread{ // consumatore Buffer buf; Cons(Buffer p){ this.buf=p; int val; while (buf.get_out()==buf.get_in()); val=buf.get(buf.get_out()); System.out.println("\nconsumo "+val+" out="+buf.get_out()); buf.put_out((buf.get_out()+1)%10);

23 Passaggio di parametri tra Thread Altro consumatore public class Cons1 extends Thread{ // consumatore Buffer buf; Cons1(Buffer p){ this.buf=p; int val; while (buf.get_out()==buf.get_in()); val=buf.get(buf.get_out()); System.out.println("\ncons_1 "+val+ out="+buf.get_out()); buf.put_out((buf.get_out()+1)%10); Programma principale: public class pc{ public static void main(string[] a){ Buffer buf=new Buffer(); Prod c=new Prod(buf); Cons t=new Cons(buf); Cons1 z=new Cons1(buf); c.start(); t.start(); z.start();

24 Passaggio di parametri e sincronizzazione tra Thread Una soluzione al problema e quello di usare un arbitro software. In questo caso si usa l alternanza stretta. La classe condivisa e la seguente: import java.io.*; public class BufferPlus{ private int buf[]= new int[10]; private int in, out; private int blk; BufferPlus(){ in=0; out=0; blk=0; int get_in(){ return in; int get_out(){ return out; void put_in(int a){ in=a; void put_out(int b){ out=b; void put(int i, int f){ buf[i]=f; int get(int i){ return (int)buf[i]; int getblk(){ return (int)blk; void putblk(int a){blk=a;

25 Passaggio di parametri e sincronizzazione tra Thread Primo consumatore: import java.util.*; public class ConsPlus extends Thread{ // consumatore BufferPlus buf; ConsPlus(BufferPlus p){ this.buf=p; int val; while( buf.getblk() == 0); { while (buf.get_out()==buf.get_in()); val=buf.get(buf.get_out()); System.out.println("\nconsumo "+val+ out="+buf.get_out()); buf.put_out((buf.get_out()+1)%10); buf.putblk(0);

26 Passaggio di parametri e sincronizzazione tra Thread Secondo consumatore: import java.util.*; public class Cons1Plus extends Thread{ // consumatore BufferPlus buf; Cons1Plus(BufferPlus p){ this.buf=p; int val; while(buf.getblk()==1); { while (buf.get_out()==buf.get_in()); val=buf.get(buf.get_out()); System.out.println("\ncons_1 "+val+ out="+buf.get_out()); buf.put_out((buf.get_out()+1)%10); buf.putblk(1);

27 Monitors in Java La soluzione alla mutua esclusione in Java e data dall uso dei monitor (Hoare) I monitor sono realizzati mediante i metodi synchronized: il thread che esegue un metoro synchronized di un oggetto deve preventivamente acquisire il monito associato all oggetto Il monitor viene rilasciato all uscita dal metodo All interno di un metodo synchronized e possibile sospendere il thread che sta eseguendo attraverso l uso dello statement wait() Wait provoca la sospensione del thread ed il rilascio del monitor da lui posseduto I thread sospesi possono essere risvegliati usando i metodi notify() e notifyall() Questi metodi possono essere invocati solo all interno di metodi synchronized L effetto di notify() e notifyall() e la ripresa dell esecuzione dei thread sospesi sul monitor detenuto dal thread che esegue la notify o la notifyall

28 Esempio di monitor in Java Riconsideriamo l esempio del produttore/consumatore: Classe condivisa: import java.io.*; public class BufferMon { private int buf[]= new int[10]; private int in, out; BufferMon(){ in=0; out=0; synchronized void put(int f) { if( ((in+1)%10) == out) try{ wait(); catch(interruptedexception e){; buf[in]=f; System.out.println("produco "+f+" in="+in); in=(in+1)%10; notify(); synchronized int get() { if(out == in) try{ wait(); catch(interruptedexception e){; int val=buf[out]; System.out.print("get "+val+" out="+out); out=(out+1)%10; notify(); return(val);

29 Esempio di monitor in Java Consumatore import java.util.*; public class ConsMon extends Thread{ // consumatore BufferMon buf; ConsMon(BufferMon p){ this.buf=p; int val=buf.get(); System.out.println("cons = "+val); Altro consumatore import java.util.*; public class Cons1Mon extends Thread{ // consumatore BufferMon buf; Cons1Mon(BufferMon p){ this.buf=p; int val=buf.get(); System.out.println("cons_1 = "+val);

30 Esempio di monitor in Java Produttore: import java.util.*; public class ProdMon extends Thread{ // produttore BufferMon buf; Random r; ProdMon(BufferMon p){ this.buf=p; r=new Random(); buf.put(r.nextint()); Principale: public class pcmon{ public static void main(string[] a){ BufferMon buf=new BufferMon(); ProdMon c=new ProdMon(buf); ConsMon t=new ConsMon(buf); Cons1Mon z=new Cons1Mon(buf); c.start(); t.start(); z.start();

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

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

Appunti di Sistemi Operativi. Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo. Introduzione ai processi - concorrenza

Appunti di Sistemi Operativi. Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo. Introduzione ai processi - concorrenza Appunti di Sistemi Operativi Enzo Mumolo e-mail address :mumolo@units.it web address :www.units.it/mumolo Introduzione ai processi - concorrenza Indice 1 La gestione dei Processi 1 1.1 Una realizzazione

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

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

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

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

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

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

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

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

Thread in Java CAPITOLO 18. 18.1 Richiami di gestione di processi

Thread in Java CAPITOLO 18. 18.1 Richiami di gestione di processi CAPITOLO 18 Thread in Java Usualmente l esecuzione di un programma è sostenuta da un processo. Nella terminologia Java i processi sono denominati thread. Un thread è dunque costituito da un flusso di esecuzione

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

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

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

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

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

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

Un programma concorrente è un programma nel quale diverse computazioni possono essere eseguite allo stesso tempo Alcuni sistemi sono implicitamente Un programma concorrente è un programma nel quale diverse computazioni possono essere eseguite allo stesso tempo Alcuni sistemi sono implicitamente concorrenti: Concorrenza in database query caching delle

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

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

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

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

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

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

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

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

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

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

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

Il costrutto monitor

Il costrutto monitor Il Monitor 1 Monitor Definizione del monitor Esempi d uso Realizzazione del costrutto monitor Realizzazione di politiche di gestione delle risorse Chiamate innestate a procedure del monitor Realizzazione

Dettagli

progam ponteasensounicoalaternato ; type dir = ( nord, sud );

progam ponteasensounicoalaternato ; type dir = ( nord, sud ); Esercizio di Sincronizzazione Tra Processi: Ponte a Senso Unico Alternato Un ponte contiene una sola csia di traffico consentendo così l'accesso a macchine provenienti da una sola direzione per volta,

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

Programmazione Java Threads

Programmazione Java Threads Programmazione Java Threads Amleto Di Salle Dipartimento di Ingegneria e Scienze dell Informazione e Matematica Università degli Studi dell Aquila amleto.disalle@univaq.it. Sommario 2 2» Cosa è: Processo»

Dettagli

Il costrutto monitor [Hoare 74]

Il costrutto monitor [Hoare 74] Il monitor 1 Il costrutto monitor [Hoare 74] Definizione: Costrutto sintattico che associa un insieme di operazioni (entry, o public) ad una struttura dati comune a più processi, tale che: Le operazioni

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

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

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

Java RMI: Esempio Completo di un Applicazione Distribuita

Java RMI: Esempio Completo di un Applicazione Distribuita Java RMI: Esempio Completo di un Applicazione Distribuita Il Problema Produttore/Consumatore in Ambiente Distribuito* *a cura del Prof. L. Nigro, Università della Calabria Java RMI (Remote Method Invocation)

Dettagli

Il costrutto monitor [Hoare 74]

Il costrutto monitor [Hoare 74] Il monitor 1 Il costrutto monitor [Hoare 74] Definizione: Costrutto sintattico che associa un insieme di operazioni (entry o public) ad una struttura dati comune a più processi, tale che: Le operazioni

Dettagli

SISTEMI OPERATIVI. Sincronizzazione in Java (Semafori e barriere) Patrizia Scandurra (MODULO DI INFORMATICA II) LABORATORIO

SISTEMI OPERATIVI. Sincronizzazione in Java (Semafori e barriere) Patrizia Scandurra (MODULO DI INFORMATICA II) LABORATORIO SISTEMI OPERATIVI (MODULO DI INFORMATICA II) LABORATORIO Sincronizzazione in Java (Semafori e barriere) Patrizia Scandurra Università degli Studi di Bergamo a.a. 2012-13 La gestione dei thread in Java

Dettagli

UN CLONE IN CLIKE C-LIKE DI SEGUIVISIONE

UN CLONE IN CLIKE C-LIKE DI SEGUIVISIONE IDROID 86 LAB pagg 12-13 23-04-2007 14:57 Pagina 12 I-D01 LAB UN CLONE IN CLIKE C-LIKE DI SEGUIVISIONE PROGRAMMAZIONE Alcuni comportamenti predefiniti attivabili su I-Droid01 sono facilmente riproducibili

Dettagli

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione Informatica 3 Informatica 3 LEZIONE 6: Il controllo dell esecuzione Modulo 1: La gestione delle eccezioni Modulo 2: Programmazione concorrente Lezione 6 - Modulo 1 La gestione delle eccezioni Politecnico

Dettagli

Algoritmi di Ricerca. Esempi di programmi Java

Algoritmi di Ricerca. Esempi di programmi Java Fondamenti di Informatica Algoritmi di Ricerca Esempi di programmi Java Fondamenti di Informatica - D. Talia - UNICAL 1 Ricerca in una sequenza di elementi Data una sequenza di elementi, occorre verificare

Dettagli

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()

Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind() Organizzazione della lezione Lezione 18 Remote Method Invocation - 6 Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di Salerno

Dettagli

Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi

Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi Sistemi Operativi Lez. 13: primitive per la concorrenza monitor e messaggi Osservazioni I semafori sono strumenti particolarmente potenti poiché consentono di risolvere ogni problema di sincronizzazione

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

Introduzione al linguaggio Java. Applicazioni ed Applets: come scriverli e farli girare. Caratteristiche originali e differenze con C / C++.

Introduzione al linguaggio Java. Applicazioni ed Applets: come scriverli e farli girare. Caratteristiche originali e differenze con C / C++. Introduzione al linguaggio Java Cosa c è di nuovo in Java? Java ed Internet. Applicazioni ed Applets: come scriverli e farli girare. Caratteristiche originali e differenze con C / C++. Dove trovare informazioni?

Dettagli

Capitolo 7: Sincronizzazione

Capitolo 7: Sincronizzazione Capitolo 7: Sincronizzazione Il problema della sincronizzazione. Il problema della sezione critica. Hardware per la sincronizzazione. Semafori. Problemi classici di sincronizzazione. Monitor (cenni). 7.1

Dettagli

TFA 42 Sistemi e Reti di Calcolatori per la Didattica

TFA 42 Sistemi e Reti di Calcolatori per la Didattica Università degli Studi di Pisa 42 Sistemi e Reti di Calcolatori per la Didattica 29/03/2013 Laura Ricci Laura Ricci 1 DNS: DOMAIN NAME SYSTEM Persone: molti identificativi: o # CF, nome, # passaporto Host

Dettagli

Monitor. Introduzione. Struttura di un TDA Monitor

Monitor. Introduzione. Struttura di un TDA Monitor Monitor Domenico Cotroneo Dipartimento di Informatica e Sistemistica Introduzione E stato introdotto per facilitare la programmazione strutturata di problemi in cui è necessario controllare l assegnazione

Dettagli

Esercizi e soluzioni

Esercizi e soluzioni Esercizi e soluzioni Esercizi e soluzioni Esercizi modulo 1 Esercizio 1.a) HelloWorld Digitare, salvare, compilare ed eseguire il programma HelloWorld. Consigliamo al lettore di eseguire questo esercizio

Dettagli

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati Condizione di sincronizzazione Qualora si voglia realizzare una determinata politica di gestione delle risorse,la decisione se ad

Dettagli

RMI Remote Method Invocation

RMI Remote Method Invocation RMI Remote Method Invocation [Pagina intenzionalmente vuota] (1 12 2004) slide 4:1/18 (p.106) Un applicazione RMI è un applicazione distribuita ad oggetti. Applicazione RMI tipica, strutturata in: server:

Dettagli

PROGRAMMAZIONE CONCORRENTE IN JAVA

PROGRAMMAZIONE CONCORRENTE IN JAVA PROGRAMMAZIONE CONCORRENTE IN JAVA Supporto per il monitor con condition esplicite Al fine di facilitare l uso del monitor di Hoare in Java, sono utili le seguenti classi e interfacce appartenenti al package

Dettagli

Meccanismi di sincronizzazione: Semafori e Monitor

Meccanismi di sincronizzazione: Semafori e Monitor Meccanismi di sincronizzazione: Semafori e Monitor 1 Introduzione Nelle prossime lezioni vedremo alcuni meccanismi dei sistemi operativi e dei linguaggi di programmazione sviluppati per facilitare la scrittura

Dettagli

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio

QUEUE : considerazioni. QUEUE : considerazioni. QUEUE : esempio. QUEUE : esempio QUEUE : considerazioni QUEUE : considerazioni Si è realizzata una struttura dati complessa utilizzandone una primitiva, l array. Il pregio di tale implementazione è il basso costo computazionale, mentre

Dettagli

RMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it

RMI. Java RMI RMI. G. Prencipe prencipe@di.unipi.it Java Remote Method Invocation -- RMI G. Prencipe prencipe@di.unipi.it RMI RMI è una tecnologia JAVA che permette a una JVM di comunicare con un altra JVM per farle eseguire metodi È possibile che oggetti

Dettagli

I Thread in Java e POSIX

I Thread in Java e POSIX I Thread in Java e POSIX Thread e Multithreading Per risolvere i problemi di efficienza del modello a processi pesanti (modello ad ambiente locale) è possibile far ricorso al modello ad ambiente globale,

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Progetto di Laboratorio per il corso di Programmazione in Rete e Laboratorio

Progetto di Laboratorio per il corso di Programmazione in Rete e Laboratorio Progetto di Laboratorio per il corso di Programmazione in Rete e Laboratorio Anno Accademico 2002/2003 Matteo Baldoni Aggiornato a: May 8, 2003 Abstract Queste pagine descrivono il laboratorio per il corso

Dettagli

SISTEMI OPERATIVI. Sincronizzazione dei processi. Domande di verifica. Luca Orrù Centro Multimediale Montiferru 30/05/2007

SISTEMI OPERATIVI. Sincronizzazione dei processi. Domande di verifica. Luca Orrù Centro Multimediale Montiferru 30/05/2007 2007 SISTEMI OPERATIVI Sincronizzazione dei processi Domande di verifica Luca Orrù Centro Multimediale Montiferru 30/05/2007 Sincronizzazione dei processi 1. Si descrivano i tipi di interazione tra processi?

Dettagli

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone

R. Focardi 2002 Laboratorio di Ingegneria del Software Slide 1. Applicazioni = programmi stand-alone Il linguaggio Java Nato nel maggio 95 (James Gosling & al.) Orientato ad oggetti, basato sulle classi, concorrente Fortemente tipato: distinzione chiara tra errori statici ed errori dinamici Ad alto livello:

Dettagli

Organizzazione della lezione. 15. Java Remote Method Invocation (3) Lo schema del Factory Design Pattern - 1. Factory design pattern

Organizzazione della lezione. 15. Java Remote Method Invocation (3) Lo schema del Factory Design Pattern - 1. Factory design pattern Organizzazione della lezione 15. Java Remote Method Invocation (3) Vittorio Scarano Corso di Programmazione Distribuita Laurea di I livello in Informatica Università degli Studi di Salerno Il design pattern

Dettagli

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); }

/** * VETTORE DINAMICO elementi */ private Vector elementi; /** * METODO COSTRUTTORE */ public coda() { elementi=new Vector(); } import java.util.*; class coda * Questa classe contiene tutti i metodi per la gestione della coda * @author D'Ambrosio Giovanni Classe 4D I.T.I.S. Grottaminarda * @version 26/02/2010 * VETTORE DINAMICO

Dettagli

Corso di Laurea in Informatica e Comunicazione Digitale. a.a. 2006-2007. Interazione Uomo-Macchina. Introduzione a Java.

Corso di Laurea in Informatica e Comunicazione Digitale. a.a. 2006-2007. Interazione Uomo-Macchina. Introduzione a Java. Corso di Laurea in Informatica e Comunicazione Digitale a.a. 2006-2007 Interazione Uomo-Macchina Introduzione a Java Seconda Parte Irene Mazzotta Giovanni Cozzolongo Vincenzo Silvetri 1 Richiami: Java

Dettagli

Supporto al Sistema Operativo

Supporto al Sistema Operativo Supporto al Sistema Operativo Middleware di supporto al sistema operativo in sistemi distribuiti Funzione del nucleo Modelli architetturali di SO Decomposizione delle funzionalità Processi, thread, processi

Dettagli

Lezione 5: Socket SSL/ TLS. Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno

Lezione 5: Socket SSL/ TLS. Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno Lezione 5: Socket SSL/ TLS Corso di Programmazione in Rete Laurea Magistrale in Ing. Informatica Università degli Studi di Salerno 1 Outline Introduzione Gestione delle chiavi e dei certificati Comunicazione

Dettagli

Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione

Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione Gli EJB offrono vari vantaggi allo sviluppatore di una applicazione Un ambiente di esecuzione che gestisce o naming di oggetti, sicurezza, concorrenza, transazioni, persistenza, distribuzione oggetti (location

Dettagli

Applicazioni web. Parte 5 Socket

Applicazioni web. Parte 5 Socket Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Applicazioni web Parte 5 Michele Tomaiuolo tomamic@ce.unipr.it Protocolli Internet I computer

Dettagli

Sistemi Operativi. Lezione 7 Comunicazione tra processi

Sistemi Operativi. Lezione 7 Comunicazione tra processi Lezione 7 Comunicazione tra processi Introduzione La soluzione sw al problema della mutua esclusione è abbastanza complessa Algoritmo di Peterson La soluzione hw mediante disabilitazione degli interrupt

Dettagli

Introduzione. Meccanismi di sincronizzazione: Semafori e Monitor. Semafori - Definizione. Semafori - Descrizione informale

Introduzione. Meccanismi di sincronizzazione: Semafori e Monitor. Semafori - Definizione. Semafori - Descrizione informale Introduzione Meccanismi di sincronizzazione: Nelle prossime lezioni vedremo alcuni meccanismi dei sistemi operativi e dei linguaggi di programmazione sviluppati per facilitare la scrittura di programmi

Dettagli

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni

La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.

Dettagli

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP

(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP (VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRGDWDJUDP D /LQH&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: i inviano al server pacchetti (vuoti) che vengono interpretati dal server come richiesta

Dettagli

Esempio Ragionato di analisi-progetto-sviluppo. Casello autostradale

Esempio Ragionato di analisi-progetto-sviluppo. Casello autostradale Casello Autostradale 1 Esempio Ragionato di analisi-progetto-sviluppo Casello autostradale Deriva dal compito del 28/6/2004 Ultima revisione Luglio 2007 Lo scopo di questo documento è illustrare il processo

Dettagli

Concetto di processo

Concetto di processo Università degli Studi della Calabria Corso di Laurea in Ingegneria Informatica Lucidi delle esercitazioni di (Corsi A e B) A.A. 2002/2003 1 Concetto di processo Nei primi sistemi di calcolo era consentita

Dettagli

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti 13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/

Dettagli

Gestione delle eccezioni in Java

Gestione delle eccezioni in Java Gestione delle eccezioni in Java - Introduzione al concetto di eccezioni E possibile definire un eccezione come un situazione imprevista che il flusso di un applicazione può incontrare. È possibile gestire

Dettagli

JAVA INTRODUZIONE C++ JDK e JRE API IDE (BLUEJ) JAVA Introduzione. Versioni e IDE DIAPOSITIVA 2 ALESSANDRO URSOMANDO

JAVA INTRODUZIONE C++ JDK e JRE API IDE (BLUEJ) JAVA Introduzione. Versioni e IDE DIAPOSITIVA 2 ALESSANDRO URSOMANDO JAVA JAVA Introduzione INTRODUZIONE C++ JDK e JRE API IDE (BLUEJ) Cross Platform Web Dinamico Versioni e IDE DIAPOSITIVA 2 1 JAVA La programmazione orientata agli oggetti JAVA La programmazione OOP Nascita

Dettagli

CAPITOLO 24 I MONITOR

CAPITOLO 24 I MONITOR EFFETTO DELLE PRIMITIVE - signal E wait SUI SEMAFORI CAPITOLO 24 I MONITOR I semafori sono un mezzo efficace per la gestione della mutua esclusione in ambienti con processi concorrenti, ma spesso è difficile

Dettagli

Prova d Esame 07.04.2006 Compito A

Prova d Esame 07.04.2006 Compito A DOMANDA 1 (6 punti) Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { public static String s1 = "Ciao"; protected int n; public General() { n = 1; public

Dettagli

Informatica. Prof. A. Longheu. Introduzione ai Linguaggi Object-Oriented

Informatica. Prof. A. Longheu. Introduzione ai Linguaggi Object-Oriented Informatica Prof. A. Longheu Introduzione ai Linguaggi Object-Oriented 1 Generalità programmazione OO La programmazione ad oggetti è un particolare modo di scrivere il programma. Si prevede che: 1) si

Dettagli

Sistemi Operativi Sincronizzazione tra Processi

Sistemi Operativi Sincronizzazione tra Processi Sistemi Operativi Processi Docente: Claudio E. Palazzi cpalazzi@math.unipd.it Crediti per queste slides al Prof. Tullio Vardanega 1 Processi indipendenti possono avanzare concorrentemente senza alcun vincolo

Dettagli

Sistemi Operativi Esercizi Sincronizzazione

Sistemi Operativi Esercizi Sincronizzazione Sistemi Operativi Esercizi Sincronizzazione Docente: Claudio E. Palazzi cpalazzi@math.unipd.it Esercizi Sincronizzazione Sistemi Operativi - Claudio Palazzi 14 Semafori (1) Semafori: variabili intere contano

Dettagli

Prova d Esame 07.04.2006 Compito B

Prova d Esame 07.04.2006 Compito B DOMANDA 1 (6 punti) Si analizzi il codice seguente e si scriva l output prodotto dai metodi main public class General { public static String s1 = "ciao"; protected int n; public General() { n = 3; public

Dettagli

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:

7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità: 7 Esercitazione (svolta): due possibilità: Java RMI: callback Molte applicazioni richiedono un meccanismo publish/subscribe I partecipanti (client) necessitano di notifiche da parte del coordinatore (server)

Dettagli

RMI: metodi equals e hashcode

RMI: metodi equals e hashcode RMI: metodi equals e hashcode Per verificare se due oggetti remoti contengono gli stessi dati, la chiamata indirizzata al metodo equals() avrebbe bisogno di contattare i server dove si trovano gli oggetti

Dettagli

Implementazione dei monitor tramite semafori Attesa condizionale Sincronizzazione nei sistemi operativi reali Transazioni atomiche

Implementazione dei monitor tramite semafori Attesa condizionale Sincronizzazione nei sistemi operativi reali Transazioni atomiche Implementazione dei monitor tramite semafori Attesa condizionale Sincronizzazione nei sistemi operativi reali Transazioni atomiche 5.1 Implementazione dei monitor con i semafori Un monitor è un tipo di

Dettagli

13. Chain of Responsibility

13. Chain of Responsibility Chain of Responsibility 92 13. Chain of Responsibility (GoF pag. 223) 13.1. Descrizione Consente di separare il mittente di una richiesta dal destinario, in modo di consentire a più di un oggetto di gestire

Dettagli

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo. Prototype 28 4. Prototype (GoF pag. 117) 4.1. Descrizione 4.2. Esempio Specifica i tipi di oggetti a creare, utilizzando un istanza prototipo, e crea nuove istanze tramite la copia di questo prototipo.

Dettagli

Sistemi Operativi. Des crizione e controllo dei proces s i

Sistemi Operativi. Des crizione e controllo dei proces s i Sistemi Operativi Des crizione e controllo dei proces s i Servizi di un Sistema Operativo Permettere ad un utente di creare processi (lanciare programmi) Interallacciare l esecuzione di diversi processi,

Dettagli

Programmazione concorrente con il linguaggio Java Threads

Programmazione concorrente con il linguaggio Java Threads Programmazione concorrente con il linguaggio Java Thread, Mutua Esclusione e Sincronizzazione Alcuni aspetti architetturali e di prestazioni Threads Concetto di thread processo processo thread thread!

Dettagli

Servers Activatable. Massimo Merro Programmazione di Rete 166 / 193

Servers Activatable. Massimo Merro Programmazione di Rete 166 / 193 Servers Activatable Nelle lezioni precedenti abbiamo detto che una referenza remota ad un server di tipo UnicastRemoteObject rimane valida finchè il server è in esecuzione. Quando il server termina, o

Dettagli

Architettura Client-Server

Architettura Client-Server Architettura Client-Server 1. il client manda una richiesta al server 2. il server (in attesa) riceve la richiesta 3. il server esegue il servizio richiesto (generando un thread concorrente) 4. il server

Dettagli

Programmazione concorrente in Java. da materiale di Carlo Ghezzi e Alfredo Mo8a

Programmazione concorrente in Java. da materiale di Carlo Ghezzi e Alfredo Mo8a Programmazione concorrente in Java da materiale di Carlo Ghezzi e Alfredo Mo8a Parallelismo = mul

Dettagli

Thread. Thread. Creazione di nuovi processi. Applicazioni reali. La creazione di un nuovo processo costa I tempi di context switch sono elevati

Thread. Thread. Creazione di nuovi processi. Applicazioni reali. La creazione di un nuovo processo costa I tempi di context switch sono elevati Thread Thread Motivazioni Modelli Multithread Pthread, Threads in Win32, Thread in Java Problematiche relative ai Thread Thread Windows XP Thread Linux Applicazioni reali Creazione di nuovi processi Browser

Dettagli