Multithreading in Java

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Multithreading in Java"

Transcript

1 Multithreading in Java

2 Un programma sequenziale (single thread) class ABC {. public void main(..) {.. begin body end 2

3 Un programmamultithreaded Main Thread start start start Thread A Thread B Thread C (le thread possono scambiare dati) 3

4 Applicazioniweb/Internet Servono molti utenti simultaneamente PC client Internet Server Local Area Network PDA 4

5 Server multithreaded Servono diversi Client concorrentemente Client 1 Process Server Process Internet Server Threads Client 2 Process 5

6 Applicazioni moderne necessitano multithreading Editing e Printing di documenti in background. Printing Thread Editing Thread 6

7 Copiadifile multithreaded/parallela reader() { lock(buff[i]); read(src,buff[i]); unlock(buff[i]); buff[0] buff[1] writer() { lock(buff[i]); write(src,buff[i]); unlock(buff[i]); Cooperative Parallel Synchronized Threads 7

8 Processo ha risorse di computazione proprie ad es. ha il proprio spazio di memoria Sinonimo di programma/applicazione in esecuzione Tuttavia, ciò che è percepito dall utente come una singola applicazione spesso è il frutto dell attività di vari processi che cooperano la maggior parte delle implementazioni della JVM girano come un singolo processo

9 Thread processo leggero (lightweight) sia i processi che le thread forniscono un ambiente di esecuzione (del codice) creare una nuova thread richiede meno risorse che creare un processo ogni thread esiste nell ambito di un processo (e ogni processo ha almeno una thread di esecuzione) le thread di uno stesso processo condividono le risorse del processo (comunicazione tra thread più efficiente)

10 Processisingle/multi-threaded single-threaded threads di esecuzione multithreaded Flusso di istruzioni singolo Spazio degli indirizzi (memoria) comune Flusso di istruzioni multiplo 10

11 Ancorasu thread Una thread può essere vista come un pezzo di codice in esecuzione concorrentemente con altre thread Ogni thread consiste nell esecuzione di un sequenza di istruzioni ordinate staticamente (computazione sequenziale) Le thread sono usate per esprimere la concorrenza sia su macchine con processore singolo che multiplo L attività di programmazione con thread multiple è detto multithreading o multithreaded programming 11

12 Threade Java il multithreading è una caratteristica essenziale di Java ogni programma Java ha una main thread da cui possono essere generate altre thread la JVM esegue anche delle thread di sistema insieme al programma utente gestione della memoria trattamento dei segnali

13 Thread e Java Java supporta il multithreading fornendo primitive per: creazione di thread sincronizzazione thread scheduling comunicazione tra thread il Java Garbage Collector è eseguito come una thread a bassa priorità Il concetto di thread in Java è catturato dalla classe Thread 13

14 Classe Thread definisce una serie di metodi per la gestione delle thread implementa l interfaccia Runnable che richiede un metodo run (firma public void run()) il metodo run rappresenta il main della thread corrispondente run della classe Thread non fa nulla per programmare una thread occorre fornire una implementazione di run esistono due modi 14

15 Programmazionedi una thread estensione della classethread con riscrittura di run istanziazione di Thread fornendo un oggetto Runnable 15

16 Estensionedellaclasse Thread public class MyThread extends Thread { public void run() { // thread body of execution istanzia una thread: MyThread thr1 = new MyThread(); avvia l esecuzione della thread: thr1.start(); 16

17 Esempio public class MyThread extends Thread { // la thread public void run() { System.out.println(" questa thread è in esecuzione... "); // end class MyThread public class ThreadEx1 { // un programa che istanzia MyThread public static void main(string [] args ) { MyThread t = new MyThread(); // l invocazione di start(), invocherà a sua volta run(). t.start(); // end main() // end class ThreadEx1 17

18 Attraverso un oggetto Runnable public class MyThread implements Runnable {... public void run() { // thread body of execution istanzia oggetto: MyThread myobject = new MyThread(); istanzia una thread che si comporta come specificato da myobject: Thread thr1 = new Thread( myobject ); avvia esecuzione: thr1.start(); 18

19 Esempio public class MyThread implements Runnable { public void run() { System.out.println(" questa thread è in esecuzione... "); // end class MyThread public class ThreadEx2 { public static void main(string [] args ) { Thread t = new Thread(new MyThread()); t.start(); // end main() // end class ThreadEx2 19

20 Esecuzioni di programmi multithreaded l ordine in cui vengono eseguite le istruzioni di ogni thread nei processori non prevedibile in assenza di sincronizzazioni sono possibili tutti gli interleaving delle esecuzioni di ciascuna thread successive esecuzioni possono dar luogo a comportamenti differenti 20

21 Esempio public class Conta implements Runnable{ public Conta(int x){up = x; public void run(){ threadmessage("start!"); for (int i=0; i<up;i++) threadmessage(""+(1+i)); threadmessage("finish!"); //Display a message, preceded by the name of the current thread static void threadmessage(string message) { String threadname = Thread.currentThread().getName(); System.out.println(threadName+ ": "+ message); private int up; 21

22 Esempio (tre threadconta) public class ContaTester { public static void main(string[] args) { Thread t1 = new Thread(new Conta(10)); Thread t2 = new Thread(new Conta(10)); Thread t3 = new Thread(new Conta(10)); t1.start(); t2.start(); t3.start(); 22

23 Un rundel programma Thread-1: Start! Thread-1: 1 Thread-1: 2 Thread-1: 3 Thread-1: 4 Thread-1: 5 Thread-0: Start! Thread-0: 1 Thread-0: 2 Thread-0: 3 Thread-0: 4 Thread-0: 5 Thread-0: 6 Thread-0: 7 Thread-0: 8 Thread-1: 6 Thread-2: Start! Thread-2: 1 Thread-2: 2 Thread-2: 3 Thread-2: 4 Thread-2: 5 Thread-2: 6 Thread-2: 7 Thread-2: 8 Thread-2: 9 Thread-2: 10 Thread-2: Finish! Thread-0: 9 Thread-0: 10 Thread-0: Finish! Thread-1: 7 Thread-1: 8 Thread-1: 9 Thread-1: 10 Thread-1: Finish! 23

24 Altri run Thread-0: Start! Thread-0: 1 Thread-0: 2 Thread-0: 3 Thread-0: 4 Thread-0: 5 Thread-0: 6 Thread-0: 7 Thread-0: 8 Thread-1: Start! Thread-1: 1 Thread-1: 2 Thread-1: 3 Thread-1: 4 Thread-1: 5 Thread-2: Start! Thread-2: 1 Thread-1: 6 Thread-1: 7 Thread-1: 8 Thread-1: 9 Thread-1: 10 Thread-1: Finish! Thread-2: 2 Thread-0: 9 Thread-0: 10 Thread-0: Finish! Thread-2: 3 Thread-2: 4 Thread-2: 5 Thread-2: 6 Thread-2: 7 Thread-2: 8 Thread-2: 9 Thread-2: 10 Thread-2: Finish! Thread-0: Start! Thread-0: 1 Thread-0: 2 Thread-0: 3 Thread-0: 4 Thread-0: 5 Thread-0: 6 Thread-0: 7 Thread-0: 8 Thread-0: 9 Thread-0: 10 Thread-1: Start! Thread-2: Start! Thread-2: 1 Thread-2: 2 Thread-2: 3 Thread-2: 4 Thread-2: 5 Thread-2: 6 Thread-2: 7 Thread-2: 8 Thread-2: 9 Thread-2: 10 Thread-2: Finish! Thread-0: Finish! Thread-1: 1 Thread-1: 2 Thread-1: 3 Thread-1: 4 Thread-1: 5 Thread-1: 6 Thread-1: 7 Thread-1: 8 Thread-1: 9 Thread-1: 10 Thread-1: Finish! Thread-0: Start! Thread-0: 1 Thread-0: 2 Thread-0: 3 Thread-0: 4 Thread-0: 5 Thread-0: 6 Thread-0: 7 Thread-0: 8 Thread-0: 9 Thread-1: Start! Thread-1: 1 Thread-1: 2 Thread-1: 3 Thread-1: 4 Thread-1: 5 Thread-1: 6 Thread-1: 7 Thread-1: 8 Thread-0: 10 Thread-1: 9 Thread-0: Finish! Thread-1: 10 Thread-1: Finish! Thread-2: Start! Thread-2: 1 Thread-2: 2 Thread-2: 3 Thread-2: 4 Thread-2: 5 Thread-2: 6 Thread-2: 7 Thread-2: 8 Thread-2: 9 Thread-2: 10 Thread-2: Finish! Thread-1: Start! Thread-1: 1 Thread-1: 2 Thread-1: 3 Thread-1: 4 Thread-0: Start! Thread-0: 1 Thread-0: 2 Thread-0: 3 Thread-0: 4 Thread-0: 5 Thread-0: 6 Thread-0: 7 Thread-0: 8 Thread-0: 9 Thread-0: 10 Thread-0: Finish! Thread-2: Start! Thread-1: 5 Thread-1: 6 Thread-1: 7 Thread-1: 8 Thread-1: 9 Thread-1: 10 Thread-1: Finish! Thread-2: 1 Thread-2: 2 Thread-2: 3 Thread-2: 4 Thread-2: 5 Thread-2: 6 Thread-2: 7 Thread-2: 8 Thread-2: 9 Thread-2: 10 Thread-2: Finish! Thread-0: Start! Thread-1: Start! Thread-1: 1 Thread-1: 2 Thread-1: 3 Thread-1: 4 Thread-1: 5 Thread-1: 6 Thread-1: 7 Thread-1: 8 Thread-1: 9 Thread-1: 10 Thread-1: Finish! Thread-2: Start! Thread-2: 1 Thread-2: 2 Thread-2: 3 Thread-2: 4 Thread-2: 5 Thread-2: 6 Thread-2: 7 Thread-2: 8 Thread-2: 9 Thread-2: 10 Thread-2: Finish! Thread-0: 1 Thread-0: 2 Thread-0: 3 Thread-0: 4 Thread-0: 5 Thread-0: 6 Thread-0: 7 Thread-0: 8 Thread-0: 9 Thread-0: 10 Thread-0: Finish! 24

25 Stati dell esecuzionedi una thread new start() blocked eseguibile non-eseguibile unblocked dead 25

26 Metodo sleep metodo static di Thread Thread.sleep(3000) causa la sospensione dell esecuzione della thread corrente per 3 secondi il periodo di pausa può essere terminato con un interrupt se un interrupt avviene mentre sleep è in esecuzione, sleep lancia l eccezione controllata InterruptedException (sottoclasse di Exception) 26

27 Metodi currentthreade join Thread.currentThread() restituisce il riferimento all oggetto Thread correntemente in esecuzione metodo static di Thread t.join() mette la thread in esecuzione in attesa fino a quando la thread t termina metodo non-static di Thread 27

28 Interrupts un interrupt può essere inviato da una thread per interrompere l attività di un altra thread athread.interrupt() invia un interrupt alla thread athread ( setta l interrupt status della thread) se l interrupt avviene mentre sono in esecuzione metodi come sleep o join, viene lanciata un eccezione altrimenti, si può testare se un interrupt è avvenuto con i metodi interrupted(): metodo static, azzera l interrupt status isinterrupted(): metodo predicativo, lascia inalterato l interrupt status 28

29 Esempio public class SimpleThreads { //Display a message, preceded by the name of the current thread static void threadmessage(string message) { String threadname = Thread.currentThread().getName(); System.out.println(threadName+ ": "+ message); private static class MessageLoop implements Runnable { public void run() { String importantinfo[] = { Primo", Secondo", Terzo", Quarto ; for (int i = 0; i < importantinfo.length; i++) { try {Thread.sleep(4000); //Pause for 4 seconds catch (InterruptedException e) {threadmessage("i wasn't done!"); finally { threadmessage(importantinfo[i]); //Print a message 29

30 Esempio public static void main(string args[]) throws InterruptedException { long patience = 1000*6; //Delay before we interrupt MessageLoop thread threadmessage("starting MessageLoop thread"); long starttime = System.currentTimeMillis(); Thread t = new Thread(new MessageLoop()); t.start(); threadmessage("waiting for MessageLoop thread to finish"); while (t.isalive()) { //loop until MessageLoop thread exits threadmessage("still waiting..."); t.join(1000); //Wait maximum of 1 second for MessageLoop thread to finish if (((System.currentTimeMillis() - starttime) > patience) && t.isalive()) { threadmessage("tired of waiting!"); t.interrupt(); t.join(); threadmessage("finally!"); 30

31 Esempio: output main: Starting MessageLoop thread main: Waiting for MessageLoop thread to finish main: Still waiting... main: Still waiting... main: Still waiting... main: Still waiting... Thread-0: Primo main: Still waiting... main: Still waiting... main: Tired of waiting! Thread-0: I wasn't done! Thread-0: Secondo Thread-0: Terzo Thread-0: Quarto main: Finally! 31

32 Priorità in Java, ogni thread ha una priorità che influenza l ordine in cui vengono schedulate le thread in esecuzione. se non viene settata diversamente le thread hanno una priorità di default (NORM_PRIORITY) e sono servite in ordine di richiesta (FIFO) la priorità di una thread t si può cambiare con il metodo setpriority(int) Valori di priorità predefinite della classe Thread: MIN_PRIORITY = 1, NORM_PRIORITY=5, MAX_PRIORITY=10 32

33 Comunicazione tra thread Accesso condiviso ai dati due o più thread accedono ad uno stesso oggetto Ad es. due thread che condividono un contatore due thread che richiedono di inviare l output su System.out due operazioni simultanee su uno stesso conto corrente 33

34 Esempio Classe che implementa un contatore con incremento, decremento e lettura valore: public class Counter { private int c = 0; public void increment() { c++; public void decrement() {if (c> 0) c--; public int value() { return c; 34

35 Possibili errori con dati condivisi Interferenza avviene quando due operazioni (in thread differenti) sullo stesso dato si interfogliano Ad es., thread A incrementa il counter e thread B lo decrementa (incremento e decremento di variabili richiedono più micro-istruzioni: recupera valore, esegui operazione, salva risultato) Possibile esecuzione: A legge c; B legge c; A incrementa c; B decrementa c; A salva risultato; B salva risultato. Errore: il risultato calcolato da A viene perso 35

36 Possibili errori con dati condivisi Inconsistenza della memoria Due thread hanno una visione differente di un dato condiviso Ad es. x è condivisa tra thread A e thread B ed è inizializzata a 0 A esegue x++ B esegue System.out.println(x) Quale valore deve assumere B per x? 0 o 1? Nessuna assunzione può essere fatta in assenza di sincronizzazione tra le attività di A e B 36

37 Sequenza temporale istruzioni E corretto assumere che: ogni istruzione che precede nel codice un istruzione del tipo t.start(), avviene prima di tutte le istruzioni della thread t ogni istruzione che segue nel codice un istruzione del tipo t.join(), avviene dopo tutte le istruzioni della thread t La sincronizzazione può essere usata per forzare un ordine di esecuzione tra istruzioni di thread concorrenti 37

38 Sincronizzazione In Java, è costruita attorno all acquisizione di monitor (o intrinsic lock o monitor lock) Ogni oggetto ha un monitor associato Una thread che necessita di un accesso esclusivo e consistente ad un membro di un oggetto acquisisce il suo monitor prima e lo rilascia quando ha terminato Fin tanto che una thread è in possesso di un monitor nessuna altra thread può acquisirlo 38

39 Metodi synchronized public synchronized void increment() { c++; dichiarare un metodo synchronized assicura un esecuzione atomica del metodo stesso (come se fosse un unica istruzione) l invocazione di un metodo synchronized in una thread comporta l implicita acquisizione del monitor del parametro implicito se il monitor non è disponibile allora la thread resta in attesa il monitor viene rilasciato automaticamente quando viene eseguito il return dal metodo 39

40 Metodi synchronized in caso di due esecuzioni concorrenti di metodi synchronized di uno stesso oggetto il codice non viene interfogliato viene eseguita prima una chiamata e poi l altra mentre una chiamata è attiva tutte le altre chiamate vengono messe in attesa synchronized non si usa con costruttori (non serve) con i metodi static comporta l acquisizione del monitor dell oggetto Class corrispondente alla classe risolve i problemi di interferenza e consistenza della memoria 40

41 Esempio public class Adder implements Runnable { private Counter counter; public Adder(Counter acounter) { counter = acounter; public void run() {counter.increment(); // end class Adder counter public class Stopper implements Runnable { private Counter counter; public Stopper (Counter acounter) { counter = acounter; public void run() {counter.decrement(); // end class Stopper 41

42 Esempio public class SharedCounterTester{ public static void main(string [] args ) { Counter counterobject = new Counter(); Thread t1 = new Thread(new Adder(counterObject)); Thread t2 = new Thread(new Stopper(counterObject)); Thread t3 = new Thread(new Stopper(counterObject)); t1.start(); t2.start(); t3.start(); try{t1.join(); t2.join(); t3.join(); catch(interruptedexception e){ System.out.println(counterObject.value()); // end main() il contatore può valere -1!!! 42

43 Esempio Il problema viene risolto con: public class Counter { private int c = 0; public void increment() { c++; public synchronized void decrement() { if (c>0) c--; public int value() { return c; 43

44 Istruzioni synchronized synchronized si può usare anche su istruzioni In questo caso bisogna specificare un oggetto su cui acquisire il monitor synchronized(this) { lastname = name; namecount++; richiede il monitor del parametro implicito blocca l esecuzione di altri metodi su questo oggetto Se ciò non è necessario, possiamo usare oggetti differenti solo per scopi di sincronizzazione 44

45 Oggetti usati come monitor public class MsLunch { private long c1 = 0, c2 = 0; private Object lock1 = new Object(); private Object lock2 = new Object(); public void inc1() { synchronized(lock1) { c1++; public void inc2() { synchronized(lock2) { c2++; Gli incrementi di c1 e c2 possono essere interfogliati ma non possiamo interfogliare due incrementi della stessa variabile 45

46 Acquisizione multipla di un monitor Una thread non può acquisire un monitor posseduto da un altra thread ma può riacquisire un monitor che già possiede Viene consentito per evitare che una thread possa bloccare se stessa un codice sincronizzato invoca un metodo che contiene altro codice sincronizzato con lo stesso monitor 46

47 Accesso atomic Un azione è atomic se viene percepita come un tutt uno (come un un unica istruzione elementare) viene eseguita completamente senza interruzione o non viene eseguita c++ non è atomic Accesso atomic (lettura/scrittura) garantito su variabili dichiarate volatile variabili con riferimenti a oggetti variabili di tipo primitivo esclusi long e double Usare accessi atomic è più efficiente che usare synchronized (non usa monitor) 47

48 Metodo wait metodo di Object obj.wait(10000) all interno del codice di una thread T causa la sospensione dell esecuzione di T finché: sono trascorsi 10 secondi o un altra thread invoca notify() su obj e T viene scelta come thread da svegliare o un altra thread invoca notifyall() su obj o un altra thread invia un interrupt su T se si usa wait() oppure wait(0) non c è timeout 48

49 Metodo wait per invocare wait su obj una thread deve possedere il monitor di obj il monitor viene rilasciato subito dopo che la thread sospende l esecuzione altrimenti viene sollevata una IllegalMonitorStateException (eccezione non controllata) invocare wait all interno di un metodo synchronized è un modo semplice per ottenere il monitor del parametro implicito se un interrupt avviene mentre wait è in esecuzione, wait lancia l eccezione controllata InterruptedException (sottoclasse di Exception) 49

50 notifyalle notify notifyall sveglia tutte le thread in attesa sull oggetto su cui è invocato notify sveglia una thread in attesa sull oggetto su cui è invocato se ci sono più thread in attesa la scelta è arbitraria e dipende dall implementazione è utile solo quando si eseguono molte thread dello stesso tipo e quindi non importa seguire un ordine per entrambi i metodi è necessario acquisire prima il monitor dell oggetto su cui vengono invocati 50

51 Esempio: producer-consumerpattern una thread producer (produce dati) e una thread consumer (consuma dati) le thread comunicano attraverso un oggetto condiviso Requisiti da rispettare il consumer non deve provare a prendere il dato prima che il producer lo rilasci il producer non deve rilasciare un nuovo dato prima che il consumer prenda il precedente 51

52 Esempio: oggetto condiviso public class Drop { private String message; //from producer to consumer private boolean empty = true; // true means no new message public synchronized String take() { //wait until message is available. while (empty) { try { wait(); catch (InterruptedException e) { empty = true; //toggle status notifyall(); //notify producer that status has changed return message; public synchronized void put(string message) { //wait until message has been retrieved while (!empty) { try { wait(); catch (InterruptedException e) { empty = false; this.message = message; notifyall(); 52

53 Esempio: producer import java.util.random; public class Producer implements Runnable { private Drop drop; public Producer(Drop drop) { this.drop = drop; public void run() { String importantinfo[ ] = { "Mares eat oats", "Does eat oats", "Little lambs eat ivy", "A kid will eat ivy too" ; Random random = new Random(); for (int i = 0; i < importantinfo.length; i++) { drop.put(importantinfo[i]); try { Thread.sleep(random.nextInt(5000)); catch (InterruptedException e) { drop.put("done"); 53

54 Esempio: Consumer import java.util.random; public class Consumer implements Runnable { private Drop drop; public Consumer(Drop drop) { this.drop = drop; public void run() { Random random = new Random(); String message; while(!(message = drop.take()).equals("done")) { System.out.println("MESSAGE: "+ message); try { Thread.sleep(random.nextInt(5000)); catch (InterruptedException e) { 54

55 Esempio: classe tester public class ProducerConsumerExample { public static void main(string[] args) { Drop drop = new Drop(); (new Thread(new Producer(drop))).start(); (new Thread(new Consumer(drop))).start(); 55

56 Osservazioni non bisogna abusare nell uso di synchronized la sincronizzazione sequenzializza il codice opposto di parallelismo la sincronizzazione può ostacolare o fin anche bloccare la computazione (liveness) thread che sono in attesa reciproca (deadlock) thread che non riescono ad accedere frequentemente a risorse (starvation) thread che tentano di sincronizzarsi senza riuscirci (livelock) 56

57 Sincronizzazione: problemi Deadlock due o più thread si bloccano a vicenda viene invocato un metodo synchronized su un oggetto su cui l altra thread ha in esecuzione un metodo synchronized e viceversa Starvation una thread non riesce ad accedere ad una risorsa regolarmente un metodo synchronized di un oggetto impiega molto tempo e una thread lo invoca spesso. Altre thread che richiedono accesso ad un metodo synchronized dello stesso oggetto possono essere bloccate 57

58 Sincronizzazione: problemi Livelock due thread che agiscono una in risposta all azione dell altra due persone che vogliono attraversare contemporaneamente una strettoia. Una si fa a destra e l altra a sinistra ma non riescono a passare. Quindi la prima si sposta ora a sinistra e la seconda in risposta si sposta a destra, e così via. 58

59 Oggetti immutabili e concorrenza oggetti immutabili sono molto utili nei programmi concorrenti non possono cambiare stato, quindi nessuna interferenza tra thread inconsistenza della memoria oggetti mutabili vs. oggetti immutabili cambio di valore vs. nuovo oggetto istanziare oggetti non è un operazione particolarmente onerosa costo è compensato da una più efficiente garbage collection e dall eliminazione del codice per evitare inconsistenze per gli oggetti immutabili 59

60 Classe SynchronizedRGB(1) public class SynchronizedRGB { private int red, green, blue; //Values must be between 0 and 255 private String name; private void check(int red, int green, int blue) { if (red < 0 red > 255 green < 0 green > 255 blue < 0 blue > 255) { throw new IllegalArgumentException(); public SynchronizedRGB(int red, int green, int blue, String name) { check(red, green, blue); this.red = red; this.green = green; this.blue = blue; this.name = name; 60

61 Classe SynchronizedRGB(2) public void set(int red, int green, int blue, String name) { check(red, green, blue); synchronized (this) { this.red = red; this.green = green; this.blue = blue; this.name = name; public synchronized int getrgb() { return ((red << 16) (green << 8) blue); public synchronized String getname() { return name; public synchronized void invert() { red = red; green = green; blue = blue; name = "Inverse of " + name; 61

62 Problemi di consistenza una thread A esegue il codice seguente SynchronizedRGB color = new SynchronizedRGB(0,0,0, "Black"); int mycolorint = color.getrgb(); String mycolorname = color.getname(); un altra thread invoca color.set dopo l invocazione a color.getrgb e prima di color.getname la prima thread in mycolorint e mycolorname ha dei dati spuri che possono non corrispondere ad uno stato assunto dall oggetto color 62

63 Problemi di consistenza Questo problema si può evitare con un blocco sincronizzato synchronized (color) { int mycolorint = color.getrgb(); String mycolorname = color.getname(); In generale, le classi di oggetti immutabili non danno problemi di consistenza e il loro uso è sicuro in ambienti concorrenti 63

64 Strategia per definire classi immutabili non fornire metodi modificatori rendere le variabili di istanza final e private impedire alle sottoclassi di sovrascrivere metodi classe dichiarata final (semplice) oppure costruttore private e istanziare oggetti attraverso metodi static (sofisticato) se le variabili di istanza contengono riferimenti a oggetti mutabili non far modificare questi oggetti: non fornire metodi che modificano questi oggetti non condividere questi riferimenti fuori della classe (usare clonazione) 64

65 Classe ImmutableRGB final public class ImmutableRGB { final private int red, green, blue; final private String name; private void check(int red, int green, int blue) { if (red < 0 red > 255 green < 0 green > 255 blue < 0 blue > 255) { throw new IllegalArgumentException(); public ImmutableRGB(int red, int green, int blue, String name) { check(red, green, blue); this.red = red; this.green = green; this.blue = blue; this.name = name; public synchronized int getrgb() { return ((red << 16) (green << 8) blue); public synchronized String getname() { return name; public ImmutableRGMB invert() { return new ImmutableRGB(255 - red, green, blue, "Inverse of " + name); 65

66 API avanzate per la concorrenza oggetti Lock permettono di gestire monitor esplicitamente Strutture dati ad accesso concorrente permettono di ridurre l uso della sincronizzazione Es. BlockingQueue,ConcurrentMap,etc. Variabili Atomic (AtomicInteger, ) evitano errori di consistenza e riducono il ricorso alla sincronizzazione Numeri casuali concorrenti (java.util.concurrent.threadlocalrandom) Executors (Interface,Thread Pools, Fork/Join) high-level API per il lancio e la gestione delle thread 66

67 Executors in tutti gli esempi visti esiste un collegamento stretto tra il compito svolto da una thread (come definito da Runnable) e la thread stessa (come definita da Thread) va bene per piccole applicazioni per programmi complessi ha senso separare la creazione e la gestione di una thread dal compito svolto dalla thread stessa. gli aspetti di creazione/gestione delle thread sono svolte dagli executors. interfacce Executor: definiscono tre tipi di oggetti executor thread pools: sono le più comuni implementazioni di executor fork/join: è una infrastruttura (nuova in JDK 7) per sfruttare processori multipli 67

Multithreading in Java. Fondamenti di Sistemi Informativi 2014-2015

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

Dettagli

Java threads (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

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

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

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Ingegneria del software A Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Ingegneria del software A Programmazione concorrente (in Java) Michele Tomaiuolo Multi-programmazione

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

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

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

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

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

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

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

I Thread. Sistema Operativo e Thread

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

Dettagli

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

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

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

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

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

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

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

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

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

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

T E O R I A D I P R O G E T T A Z I O N E D E L S O F T W A R E

T E O R I A D I P R O G E T T A Z I O N E D E L S O F T W A R E Threading T E O R I A D I P R O G E T T A Z I O N E D E L S O F T W A R E Caratteristiche principali dei thread Consentono di eseguire elaborazioni simultanee in un programma scritto in C#. Possono essere

Dettagli

Il problema del produttore e del consumatore. Cooperazione tra processi

Il problema del produttore e del consumatore. Cooperazione tra processi Il problema del produttore e del consumatore Cooperazione tra processi Risorsa consumabile I processi disgiunti possono interferire tra loro a causa dell'uso di risorse permanenti, ma ognuno di essi ignora

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

Esercizi della lezione 5 di Java

Esercizi della lezione 5 di Java Esercizi della lezione 5 di Java Esercizio 5 Create il tipo di dato Counter dell Esercizio 1 come sottoclasse del tipo di dato SimpleCounter. Esercizio 1 Create un tipo di dato Counter che abbia: un valore

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

Inizializzazione, Assegnamento e Distruzione di Classi

Inizializzazione, Assegnamento e Distruzione di Classi Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della

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

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio

Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica lezione del 30 maggio 2014 Introduzione Un programma diviso in sezioni distinte Un approccio alla

Dettagli

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo I Thread 1 Consideriamo due processi che devono lavorare sugli stessi dati. Come possono fare, se ogni processo ha la propria area dati (ossia, gli spazi di indirizzamento dei due processi sono separati)?

Dettagli

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

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

Dettagli

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

Pronto Esecuzione Attesa Terminazione

Pronto Esecuzione Attesa Terminazione Definizione Con il termine processo si indica una sequenza di azioni che il processore esegue Il programma invece, è una sequenza di azioni che il processore dovrà eseguire Il processo è quindi un programma

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

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Main System Monitor Keyboard

Main System Monitor Keyboard Composite 57 8. Composite (Gof pag. 163) 8.1. Descrizione Consente la costruzione di gerarchie di oggetti composti. Gli oggetti composti possono essere conformati da oggetti singoli, oppure da altri oggetti

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

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

STRUTTURE DEI SISTEMI DI CALCOLO

STRUTTURE DEI SISTEMI DI CALCOLO STRUTTURE DEI SISTEMI DI CALCOLO 2.1 Strutture dei sistemi di calcolo Funzionamento Struttura dell I/O Struttura della memoria Gerarchia delle memorie Protezione Hardware Architettura di un generico sistema

Dettagli

Java: Compilatore e Interprete

Java: Compilatore e Interprete Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT

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

Programmazione a Oggetti Lezione 10. Ereditarieta

Programmazione a Oggetti Lezione 10. Ereditarieta Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare

Dettagli

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012 Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

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

Programmazione concorrente in Java. da materiale di Carlo Ghezzi e Alfredo Motta Programmazione concorrente in Java da materiale di Carlo Ghezzi e Alfredo Motta Parallelismo = multitasking Possiamo scrivere un programma in cui diverse attività (task) evolvono in parallelo da un punto

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

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

Siti web centrati sui dati Architettura MVC-2: i JavaBeans

Siti web centrati sui dati Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

Dettagli

Test di unità con JUnit4

Test di unità con JUnit4 Test di unità con JUnit4 Richiamo sul test di unità Il test d unità è una metodologia che permette di verificare il corretto funzionamento di singole unità di codice in determinate condizioni. Nel caso

Dettagli

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete La prima applicazione Java Programma MyFirstApplication Il programma visualizza una finestra vuota sullo schermo. Importo il package delle classi usate nel seguito. Dichiaro la classe MyFirstApplication

Dettagli

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione. Compito fondamentale di un S.O. è infatti la gestione dell

Dettagli

Introduzione ai Metodi Formali

Introduzione ai Metodi Formali Intruzione ai Meti Formali Sistemi software anche molto complessi regolano la vita quotidiana, anche in situazioni life-critical (e.g. avionica) e business-critical (e.g. operazioni bancarie). Esempi di

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

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

Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2

Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2 Computazione multi-processo Avere più processi allo stesso momento implica/richiede Processi e Threads Pt. 2 Concorrenza ed efficienza Indipendenza e protezione dei dati ma deve prevedere/permettere anche:

Dettagli

Architettura MVC-2: i JavaBeans

Architettura MVC-2: i JavaBeans Siti web centrati sui dati Architettura MVC-2: i JavaBeans Alberto Belussi anno accademico 2008/2009 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con

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

Programmazione Orientata agli Oggetti in Linguaggio Java

Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Orientata agli Oggetti in Linguaggio Java Programmazione Grafica: Thread versione 1.0 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)

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

Parola chiave extends

Parola chiave extends Il Linguaggio Java Ereditarietà Ereditarietà L'ereditarietà permette di creare nuove classi sulla base di classi esistenti In particolare, permette di riusare il codice (metodi e campi); aggiungere nuovi

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

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

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015)

Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Programmazione ad Oggetti Modulo A (Esame del 11/9/2015) Esercizio 1 Considerate la seguente gerarchia di classi: class A { public void print(string s) { System.out.println(s); public void m1() { print("a.m1");

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

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

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

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

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

Corso sul linguaggio Java

Corso sul linguaggio Java Corso sul linguaggio Java Modulo JAVA6 A1 I file testo 1 Prerequisiti Programmazione base in Java Utilizzo di classi e oggetti Modello produttore consumatore Operazioni logiche su struttura file 2 1 Introduzione

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

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009 Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009 Luca Fossati, Fabrizio Castro, Vittorio Zaccaria October 10, 2009 Sincronizzazione - 1 1 Esercizio 1: Sincronizzazione - 1 Qual è il problema

Dettagli

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

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

Dettagli

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

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Corso di Laurea Ingegneria Informatica Fondamenti di Informatica Dispensa E01 Esempi di programmi A. Miola Ottobre 2011 1 Contenuti Vediamo in questa lezione alcuni primi semplici esempi di applicazioni

Dettagli

Coordinazione Distribuita

Coordinazione Distribuita Coordinazione Distribuita Ordinamento degli eventi Mutua esclusione Atomicità Controllo della Concorrenza 21.1 Introduzione Tutte le questioni relative alla concorrenza che si incontrano in sistemi centralizzati,

Dettagli

Sistemi Operativi. Processi GESTIONE DEI PROCESSI. Concetto di Processo. Scheduling di Processi. Operazioni su Processi. Processi Cooperanti

Sistemi Operativi. Processi GESTIONE DEI PROCESSI. Concetto di Processo. Scheduling di Processi. Operazioni su Processi. Processi Cooperanti GESTIONE DEI PROCESSI 4.1 Processi Concetto di Processo Scheduling di Processi Operazioni su Processi Processi Cooperanti Concetto di Thread Modelli Multithread I thread in diversi S.O. 4.2 Concetto di

Dettagli

Programmazione a Oggetti Modulo B

Programmazione a Oggetti Modulo B Programmazione a Oggetti Modulo B Progetto Dott. Alessandro Roncato 4/10/2011 Progetto Da svolgere singolarmente Scadenza consegna: una settimana prima dello scritto; Valutazione in base a: Corretta compilazione

Dettagli

Sistemi Operativi mod. B. Sistemi Operativi mod. B A B C A B C P 1 2 0 0 P 1 1 2 2 3 3 2 P 2 3 0 2 P 2 6 0 0 P 3 2 1 1 P 3 0 1 1 < P 1, >

Sistemi Operativi mod. B. Sistemi Operativi mod. B A B C A B C P 1 2 0 0 P 1 1 2 2 3 3 2 P 2 3 0 2 P 2 6 0 0 P 3 2 1 1 P 3 0 1 1 < P 1, > Algoritmo del banchiere Permette di gestire istanze multiple di una risorsa (a differenza dell algoritmo con grafo di allocazione risorse). Ciascun processo deve dichiarare a priori il massimo impiego

Dettagli

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni server Versione 30.5.05 Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/: applicazioni 1 La logica dei socket Abbiamo visto che un applicazione client si connette

Dettagli

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica Fondamenti di Informatica Algebra di Boole: Concetti di base Fondamenti di Informatica - D. Talia - UNICAL 1 Algebra di Boole E un algebra basata su tre operazioni logiche OR AND NOT Ed operandi che possono

Dettagli

La struttura dati ad albero binario

La struttura dati ad albero binario La struttura dati ad albero binario L albero è una struttura dati nella quale le informazioni sono organizzate in modo gerarchico, dall alto verso il basso. Gli elementi di un albero si chiamano nodi,

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

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

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

I THREAD O PROCESSI LEGGERI Generalità

I THREAD O PROCESSI LEGGERI Generalità I THREAD O PROCESSI LEGGERI Generalità Thread: segmento di codice (funzione) Ogni processo ha un proprio SPAZIO DI INDIRIZZAMENTO (area di memoria) Tutti i thread genereti dallo stesso processo condividono

Dettagli

Le variabili. Olga Scotti

Le variabili. Olga Scotti Le variabili Olga Scotti Cos è una variabile Le variabili, in un linguaggio di programmazione, sono dei contenitori. Possono essere riempiti con un valore che poi può essere riletto oppure sostituito.

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015 Java:Struttura di Programma Fabio Scanu a.s. 2014/2015 Altre Attenzioni da riservare Java è Case Sensitive: La variabile «a» e la variabile «A» sono diverse Java ha alcune regole di scrittura: I nomi delle

Dettagli

DTI / ISIN / Titolo principale della presentazione. La cena dei filosofi. Amos Brocco, Ricercatore, DTI / ISIN. 14 maggio 2012

DTI / ISIN / Titolo principale della presentazione. La cena dei filosofi. Amos Brocco, Ricercatore, DTI / ISIN. 14 maggio 2012 DTI / ISIN / Titolo principale della presentazione 1 La cena dei filosofi Amos Brocco, Ricercatore, DTI / ISIN 14 maggio 2012 Il problema dei filosofi a cena Il problema dei filosofi a cena Il problema:

Dettagli

DMA Accesso Diretto alla Memoria

DMA Accesso Diretto alla Memoria Testo di rif.to: [Congiu] - 8.1-8.3 (pg. 241 250) 08.a DMA Accesso Diretto alla Memoria Motivazioni Organizzazione dei trasferimenti DMA Arbitraggio del bus di memoria Trasferimento di un blocco di dati

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

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

UML Diagrammi delle classi. UML Diagramma classi 1

UML Diagrammi delle classi. UML Diagramma classi 1 UML Diagrammi delle classi UML Diagramma classi 1 Diagramma delle classi Non è nei nostri obiettivi affrontare UML nel suo complesso Ci concentreremo sui diagrammi delle classi che ci forniscono un linguaggio

Dettagli

10 - Programmare con gli Array

10 - Programmare con gli Array 10 - Programmare con gli Array 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

Dettagli

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Scheduling della CPU Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux Sistemi multiprocessori Fin qui si sono trattati i problemi di scheduling su singola

Dettagli

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 3 - Variabili 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 di

Dettagli