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

Размер: px
Начинать показ со страницы:

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

Транскрипт

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

2 Parallelismo = multitasking Possiamo scrivere un programma in cui diverse attività (task) evolvono in parallelo da un punto di vista fisico o logico Massimo parallelismo fisico Ogni attività parallela ha a disposizione un processore fisico Altrimenti vengono eseguite da processori condivi Secondo modalità decise da uno scheduler, in generale non controllabile dal programmatore

3 Multitasking su singolo processore Approccio Processore esegue un task Passa velocemente a un altro Sotto il governo dello scheduler Il processore sembra lavorare sui diversi task concorrentemente Passaggio da un task all altro nei momenti di inattività o per esaurimento della finestra temporale ( time sharing )

4 Caso 1: Task singolo Caso 2: Due task 4

5 Multitasking a livello di processi Processo Programma eseguibile caricato in memoria Ha un suo spazio di indirizzi (variabili e strutture dati in memoria) Ogni processo esegue un diverso programma I processi comunicano via SO, file, rete Può contenere più thread

6 Multitasking a livello di thread Thread è un attività logica sequenziale Un thread condivide lo spazio di indirizzi con gli altri thread del processo e comunica via variabili condivise Ha un suo contesto di esecuzione (program counter, variabili locali) Si parla spesso di processo light-weight

7 Thread in Java - metodo 1

8 Classe Thread start join isalive sleep(int ms) yield avvia il thread (eseguendo il metodo run) chiamato su un thread specifico e ha lo scopo di mettere in attesa il thread attualmente in esecuzione fino a quando il thread su cui è stato invocato il metodo join() non termini controlla se il thread è vivo (in esecuzione, in attesa o bloccato) sospende l esecuzione del thread mette temporaneamente in pausa il thread corrente e consente ad altri thread in stato Runnable (qualora ve ne siano) di avere una chance per essere eseguiti

9 public class A extends Thread { public void run() { for (int i=0; i<=5; i++) System.out.println("From Thread A: i= "+i); System.out.println("Exit from A"); public class B extends Thread { public void run() { for (int j=0; j<=5; j++) System.out.println("From Thread B: j= ""+j); System.out.println("Exit from B"); public class C extends Thread { public void run() { for (int k=0; k<=5; k++) System.out.println("From Thread C: k= "+k); System.out.println("Exit from C"); public class ThreadTest { public static void main(string[] args) { new A().start(); new B().start(); new C().start();

10 Output possibili Caso 1 Caso 2 From Thread A: i= 0 From Thread A: i= 1 From Thread A: i= 2 From Thread A: i= 3 From Thread A: i= 4 From Thread A: i= 5 Exit from A From Thread B: j= 0 From Thread B: j= 1 From Thread B: j= 2 From Thread B: j= 3 From Thread B: j= 4 From Thread B: j= 5 Exit from B From Thread C: k= 0 From Thread C: k= 1 From Thread C: k= 2 From Thread C: k= 3 From Thread C: k= 4 From Thread C: k= 5 Exit from C From Thread A: i= 0 From Thread A: i= 1 From Thread A: i= 2 From Thread A: i= 3 From Thread A: i= 4 From Thread A: i= 5 Exit from A From Thread C: k= 0 From Thread C: k= 1 From Thread C: k= 2 From Thread C: k= 3 From Thread C: k= 4 From Thread C: k= 5 From Thread B: j= 0 From Thread B: j= 1 From Thread B: j= 2 From Thread B: j= 3 From Thread B: j= 4 From Thread B: j= 5 Exit from B Exit from C

11 Thread in Java metodo 2 La classe Thread in realtà implementa un interfaccia chiamata Runnable L interfaccia Runnable definisce un solo metodo run che contiene il codice del thread Su ciò si basa un modo alternativo

12 Thread in Java metodo 2 metodo più generale si usa se si deve ereditare da qualche classe

13 Dati condivisi Può essere necessario imporre che certe sequenze di operazioni che accedono a dati condivisi vengano eseguite dai task in mutua esclusione class ContoCorrente { private float saldo; public ContoCorrente(float saldoiniz){ saldo=saldoinizi; public void deposito(float soldi){ saldo += soldi; public void prelievo (float soldi){ saldo -=soldi;...

14 Interferenza Fenomeno causato dall interleaving di operazioni di due o più thread Lettura di y Esecuzione espressione Scrittura in x L esecuzione concorrente di x+=y e x-=y può avere uno dei seguenti effetti incrementare x di y lasciare x immutata decrementare x di y

15 Sequenze atomiche Generalizzazione del problema a volte si vuole che certe sequenze di istruzioni vengano eseguite in isolamento, senza interleaving con istruzioni di altre sequenze parallele che altri thread potrebbero eseguire si parla di sequenze atomiche

16 Altro problema di concorrenza A volte, oltre a voler l atomicità di certe sequenze, si vogliono imporre certi ordinamenti nell esecuzione di operazioni Per esempio, che l operazione A eseguita da un thread venga eseguita prima dell operazione B di un altro thread Di solito ciò deriva dal fatto di voler garantire certe proprietà di consistenza dei dati

17 Come rendere i metodi "atomici" La parola chiave "synchronized applicata a metodi o blocchi di codice class ContoCorrente { private float saldo; public ContoCorrente(float saldoiniz){ saldo = saldoiniz; public synchronized void deposito(float soldi){ saldo += soldi; public synchronized void prelievo(float soldi){ saldo -= soldi;...

18 Esempio public class SynchronizedCounter { private int c = 0; public synchronized void increment() { c++; public synchronized void decrement() { c--; public synchronized int value() { return c;

19 public class TaskA extends Thread { private SynchronizedCounter counter; public TaskA(SynchronizedCounter c) { counter = c; public void run(){ counter.increment(); System.out.println(counter.value()); public class TaskB extends Thread { private SynchronizedCounter counter; public TaskB(SynchronizedCounter c) { counter = c; public void run(){ counter.decrement(); System.out.println(counter.value());

20 public class ThreadTest { public static void main(string[] args) { SynchronizedCounter c = new SynchronizedCounter(); TaskA ta = new TaskA(c); TaskB tb = new TaskB(c); ta.start(); tb.start();

21 Metodi synchronized Java associa un intrinsic lock a ciascun oggetto I lock operano a livello di thread Quando il metodo synchronized viene invocato se nessun metodo synchronized è in esecuzione, l'oggetto viene bloccato (locked) e quindi il metodo viene eseguito se l'oggetto è bloccato, il task chiamante viene sospeso fino a quando il task bloccante libera il lock Al massimo un singolo thread può trovarsi ad eseguire istruzioni all interno di uno stesso metodo synchronized

22 Commenti sul lock Diverse invocazioni di metodi synchronized sullo stesso oggetto non sono soggette a interleaving I costruttori non possono essere synchronized Solo il thread che crea l oggetto deve avere accesso ad esso mentre viene creato Eventuali dati final possono essere letti con metodi non synchronized I dati sono comunque in sola lettura e non possono essere modificati

23 Ulteriori commenti sul lock L intrinsic lock viene acquisito automaticamente all invocazione del metodo synchronized e rilasciato al ritorno (sia normale che eccezionale che da uncaught exception) Se il metodo synchronized fosse static Il thread acquisisce l intrinsic lock per il Class object associato alla classe Pertanto l accesso ai campi static è controllato da un lock speciale, diverso da quelli associati alle istanze della classe

24 Synchronized statements Devono specificare l oggetto a cui applicare il lock public void addname(string name) { synchronized(this) { lastname = name; namecount++; namelist.add(name); Si rilascia il lock all oggetto prima di invocare un metodo che potrebbe a sua volta richiedere di attendere il rilascio di un lock

25 Controllo fine della concorrenza Esempio: classe con due campi che non vengono modificati mai insieme public class TestBlock { private long c1 = 0; private long c2 = 0; private Object lock1 = new Object(); private Object lock2 = new Object(); public void inc1() { synchronized(lock1) {c1++; public void inc2() { synchronized(lock2) {c2++;

26 Alcune regole pratiche Usare lock per la modifica degli attributi dell oggetto Per essere certi di avere uno stato consistente Usare lock per l accesso a campi dell oggetto probabilmente modificati Per evitare di leggere valori vecchi Non usare lock quando si invoca un metodo su altri oggetti Per evitare deadlock Non c è bisogno di lock per accedere alle parti stateless di un metodo

27 Liveness È una proprietà molto importante in pratica Significa che un applicazione concorrente viene eseguita entro accettabili limiti di tempo Le situazioni da evitare attraverso un attenta progettazione sono deadlock, starvation e livelock

28 Deadlock Due o più thread sono bloccati per sempre, in attesa l uno dell altro Esempio: Anna e Giacomo sono amici e credono nel galateo, che dice che se una persona si inchina a un amico, deve restare inchinata fino a che l amico restituisce l inchino Problema: inchino reciproco allo stesso tempo

29 public class Friend { private final String name; public Friend(String name) { this.name = name; public String getname() { return this.name; public synchronized void bow(friend bower) { System.out.format("%s: %s" + " has bowed to me!%n", this.name, bower.getname()); bower.bowback(this); public synchronized void bowback(friend bower) { System.out.format("%s: %s" + " has bowed back to me!%n", this.name, bower.getname());

30 public class ThreadTest { public static void main(string[] args) { final Friend anna = new Friend("Anna"); final Friend giacomo = new Friend("Giacomo"); new Thread(new Runnable() { public void run() { anna.bow(giacomo); ).start(); new Thread(new Runnable() { public void run() { giacomo.bow(anna); ).start(); Classi anonime: approcio comodo per creare nuovi thread con un semplice comportamento

31 Starvation Situazione in cui un thread ha difficoltà ad accedere a una risorsa condivisa e quindi ha difficoltà a procedere Esempio: Task greedy che molto frequentemente invocano metodi lunghi ritardano costantemente il thread Uno scheduler che usa priorità cede sempre precedenza ai task greedy

32 Livelock Errore di progetto che genera una sequenza ciclica di operazioni inutili ai fini dell effettivo avanzamento della computazione Esempio: La sequenza infinita di vada prima lei Diverso dal deadlock: la computazione non è bloccata, qualcosa viene fatto ma mai niente di utile

33 Guarded blocks Come evitare il prelievo se il conto va in rosso? public class ContoCorrente { private float saldo; public synchronized void prelievo (float soldi){ while (saldo-soldi<0) wait(); saldo -= soldi; Rilascia il lock e sospende il thread!

34 Come risvegliare un task in wait? public class ContoCorrente { private float saldo; public ContoCorrente (float saldoi) { saldo = saldoi; synchronized public void deposito (float soldi) { saldo += soldi; notify(); Risveglia un task (scelto a caso) in sospeso da wait su questo oggetto, se esiste public synchronized void prelievo (float soldi) { while (saldo-soldi < 0) wait(); saldo -= soldi; Potrebbe non essere sufficiente... Il thread potrebbe ripartire anche senza essere notificato da nessun altro thread...

35 Esempio: una coda FIFO condivisa Operazione di inserimento di elemento Sospende task se coda piena while (codapiena()) wait(); Al termine notify(); Operazione di estrazione di elemento Sospende task se coda vuota while (codavuota()) wait(); Al termine notify(); Invece, notifyall risveglia tutti i task eventualmente un wait su un determinato oggetto, ma uno solo guadagna il lock!

36 public class FIFO { private boolean empty; private String message; public synchronized String take() { // Wait until message is available. while (empty) { try { wait(); catch (InterruptedException e) { // Toggle status. empty = true; // Notify producer that status has changed. notifyall(); return message; public synchronized void put(string message) { // Wait until message has been retrieved. while (!empty) { try { wait(); catch (InterruptedException e) { // Toggle status. empty = false; // Store message. this.message = message; // Notify consumer that status has changed. notifyall();

37 Ciclo di vita di un thread start born notify notifyall waiting wait ready scheduler running I/O lock dead fine I/O fine lock blocked

38 Problemi con oggetti mutabili public class SynchronizedRGB { // Values must be between 0 and 255 private int red; private int green; private int blue; private String name; private void check(int red, int green,int blue) {// public SynchronizedRGB(int red, int green, int blue, String name) {// 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() {// public synchronized String getname () {// public synchronized void invert () {// Cambia lo stato dell oggetto indipendentemente da gli altri metodi getter..

39 Problema SynchronizedRGB color = new SynchronizedRGB(0,0,0, Pitch Black );... int mycolorint = color.getrgb(); //Statement 1 String mycolorname = color.getname(); //Statement 2 Se un altro thread invoca set dopo Statement 1 ma prima di Statement 2, il valore di mycolorint non corrisponde al valore di mycolorname Il problema sorge perché l oggetto è mutabile

40 Come creare oggetti immutabili Non fornire metodi "setter" Definire tutti gli attributi di istanza final e private Non consentire alle sottoclassi di fare override dei metodi Dichiarando la classe final oppure dichiarando il costruttore private e costruendo gli oggetti mediante factory method Se gli attributi di istanza hanno riferimenti a oggetti mutabili, non consentire la loro modifica Non fornire metodi che modificano oggetti mutabili Non fare sharing di ref a oggetti mutabili Non salvare riferimenti a oggetti esterni mutabili passati al costruttore, se necessario fare copie e salvare riferimenti alle copie Inoltre creare copie degli oggetti interni mutabili se necessario per evitare di restituire gli originali attraverso i metodi

41 Esempio ImmutableRGB Ci sono due metodi setter Il primo (set) trasforma arbitrariamente l oggetto e non avrà alcun corrispettivo nella versione immutabile Il secondo, invert, viene adattato creando un nuovo oggetto invece di modificare l oggetto corrente Tutti gli attributi sono già private; vengono ulteriormente qualificati final La classe viene qualificata final Un solo attributo fa riferimento a un oggetto, e l oggetto è immutabile Non è quindi necessario far nulla per salvaguardare lo stato di eventuali oggetti mutabili contenuti

42 Soluzione ImmutableRGB final public class ImmutableRGB { // Values must be between 0 and 255. final private int red; final private int green; final private int 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;

43 Concetti avanzati Finora abbiamo visto i concetti di base, che però risultano inadeguati a un effettiva programmazione concorrente Vediamo ora concetti introdotti in java.util.concurrent.* Oggetti lock Esecutori Collezioni concorrenti Variabili atomiche

44 Oggetti lock - Lock objects Il codice synchronized definisce un caso elementare di lock (implicito), ma meccanismi più sofisticati sono forniti dal package java.util.concurrent.locks Un lock, definito dall interfaccia Lock, può essere acquisito da un solo thread, come nel caso degli implicit lock associati a codice synchronized

45 ReentrantLock A reentrant mutual exclusion Lock with the same basic behavior as the implicit monitor lock accessed using synchronized methods and statements, but with extended capabilities lock() acquires the lock trylock() acquires the lock only if it is not held by another thread at the time of invocation unlock() Attempts to release this lock

46 Classe BowLoop import java.util.random; public class BowLoop implements Runnable { private Friend bower; private Friend bowee; public BowLoop(Friend bower, Friend bowee) { this.bower = bower; this.bowee = bowee; public void run() { Random random = new Random(); for (;;) { try { Thread.sleep(random.nextInt(10)); catch (InterruptedException e) { bowee.bow(bower); Sospende il thread corrente...

47 import java.util.concurrent.locks.lock; import java.util.concurrent.locks.reentrantlock; public class Friend { private final String name; private final Lock lock = new ReentrantLock(); public Friend(String name) { this.name = name; public String getname() { return this.name; public boolean impendingbow(friend bower) { Boolean mylock = false; Boolean yourlock = false; try { mylock = lock.trylock(); yourlock = bower.lock.trylock(); finally { if (! (mylock && yourlock)) { if (mylock) lock.unlock(); if (yourlock) bower.lock.unlock(); return mylock && yourlock; Tenta di acquisire entrambi i lock, torna true se possibile, altrimenti false Ricordatevi di rilasciare i lock che potreste aver parzialmente acquisito

48 public void bow(friend bower){ if (impendingbow(bower)){ try { System.out.format("%s: %s has + " bowed to me!%n", this.name, bower.getname()); bower.bowback(this); finally { Se arriviamo qui lock.unlock(); abbiamo acquisito bower.lock.unlock(); entrambi i lock e dobbiamo else { rilasciarli System.out.format("%s: %s started + " to bow to me, but saw that + " I was already bowing to + " him.%n, this.name, bower.getname()); public void bowback(friend bower) { System.out.format("%s: %s has" + " bowed back to me!%n", this.name, bower.getname());

49 public class ThreadTest { public static void main(string[] args) { final Friend giacomo = new Friend("Giacomo"); final Friend anna = new Friend("Anna"); new Thread(new BowLoop(giacomo, anna)).start(); new Thread(new BowLoop(anna, giacomo)).start(); Tenteranno di inchinarsi in momenti diversi, alcuni riusciranno, altri no quando tentano di farlo allo stesso tempo

50 Esecutori Gli strumenti finora disponibili impongono una stretta relazione tra il compito che deve essere eseguito da un thread (definito dall oggetto Runnable) e il thread stesso, definito dall oggetto Thread I due concetti possono essere tenuti distinti in applicazioni complesse, mediante interfacce Executor thread pools fork/join Gli esecutori sono predefiniti e consentono una gestione efficiente che riduce il pesante overhead dovuto alla gestione dei thread

51 Interfacce Executors Il package java.util.concurrent definisce 3 interfacce Executor ExecutorService (estende Executor) ScheduledExecutorService (estende ExecutorService) Utilizzo di Executor Se r è un Runnable ed e è un Executor, invece di (new Thread(r)).start(); facciamo e.execute(r); evitando l overhead dovuto alla creazione degli oggetti thread

52 Implementazione di Executor Le implementazioni dell interfaccia Executor usano thread pools, ovvero thread (in numero finito) che esistono al di fuori di Runnable Un esempio comune è un executor che usa un fixed thread pool, che viene creato chiamando il factory method newfixedthreadpool() della classe java.util.concurrent.executors Gli oggetti Runnable sono inviati al pool attraverso unacoda Se i thread esistenti sono tutti occupati, tocca aspettare

53 Collezioni concorrenti Il package java.util.concurrent include estensioni a collezioni di Java, quali BlockingQueue Struttura dati FIFO che blocca o dà timeout se si cerca di inserire in coda piena o estrarre da coda vuota ConcurrentMap Consente in maniera atomica di eliminare/modificare una coppia chiave-valore solo se chiave presente e aggiungere chiave-valore solo se assente

54 Variabili atomiche Il package java.util.atomic definisce classi che supportano operazioni atomiche su singole variabili Esse posseggono tutte metodi get e set che si comportano come lettura e scrittura delle corrispondenti variabili non atomiche È disponibile anche un operazione compareandset

55 Oggetti atomici Consentono di evitare i problemi di liveness che possono essere causati dall uso dei metodi synchronized import java.util.concurrent.atomic.atomicinteger; public class AtomicCounter { private AtomicInteger c = new AtomicInteger(0); public void increment() { c.incrementandget(); public void decrement() { c.decrementandget(); public int value() { return c.get();

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

Подробнее

Concorrenza e sincronizzazione

Concorrenza e sincronizzazione Concorrenza e sincronizzazione Ingegneria del software Ing. Jody Marca [email protected] Cosa faremo oggi 2 Concorrenza Sincronizzazione Concorrenza 3 Nei programmi Java fino ad ora sviluppati è presente

Подробнее

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

Подробнее

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

Подробнее

Multithreading in Java IS-8 1

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

Подробнее

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

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

Подробнее

Concorrenza multithreading in Java RICHIAMI SU PARALLELISMO. Parallelismo = multitasking. Sistemi multi-processore 27/03/2015

Concorrenza multithreading in Java RICHIAMI SU PARALLELISMO. Parallelismo = multitasking. Sistemi multi-processore 27/03/2015 Concorrenza multithreading in Java RICHIAMI SU PARALLELISMO 1 Parallelismo = multitasking Possiamo scrivere un programma in cui diverse attività (task) evolvono in parallelo da un punto di vista logico

Подробнее

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à

Подробнее

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

Подробнее

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

Подробнее

Esercitazioni Ingegneria del So2ware 8 Threads. Giordano Tamburrelli [email protected] 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 [email protected] h@p://giordano.webfacdonal.com 1 Flusso (thread) di esecuzione In un programma sequenziale esiste un solo

Подробнее

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

Подробнее

Programmazione concorrente con il linguaggio Java

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

Подробнее

Multithreading in Java I parte. Lorenzo Gallucci

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

Подробнее

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

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

Подробнее

Decima Esercitazione. Accesso a risorse condivise tramite Monitor Java

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

Подробнее

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

Подробнее

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

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

Подробнее

Lab 4: Locks, Condition Variables in Java

Lab 4: Locks, Condition Variables in Java Dept. of Computer Science Lab 4: Locks, Condition Variables in Java Matteo Camilli [email protected] Laboratorio di Sistemi Operativi a.a. 2015/16 Università degli Studi di Bergamo 1 Esercizi Lab3

Подробнее

Lab 1: Java Multithreading

Lab 1: Java Multithreading Dept. of Computer Science Lab 1: Java Multithreading Matteo Camilli [email protected] Laboratorio di Sistemi Operativi a.a. 2015/16 Università degli Studi di Bergamo 1 Outline Programmazione multithreading

Подробнее

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

Подробнее

UNIVERSITÀ DEGLI STUDI DI BERGAMO

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

Подробнее

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

Подробнее

Esercitazione maggio 2011

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

Подробнее

Corso di Linguaggi di Programmazione

Corso di Linguaggi di Programmazione Corso di Linguaggi di Programmazione Lezione 20 Alberto Ceselli [email protected] Dipartimento di Tecnologie dell Informazione Università degli Studi di Milano 20 Maggio 2010 Unità concorrenti in

Подробнее

Esercizio sul Monitor in Java. 18 maggio 2011

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

Подробнее

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

Подробнее

GESTIONE DEGLI ERRORI

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

Подробнее

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

Подробнее

Uguaglianza e copia di oggetti

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

Подробнее

Esercitazione 15. Il problema dello Sleeping Barber

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

Подробнее

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

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

Подробнее

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

Подробнее

Esercizio monitor. Sistemi Operativi T 1

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

Подробнее

Programmazione a oggetti

Programmazione a oggetti Programmazione a oggetti Quanti oggetti, tra di loro parlando, fanno programmi. Pilu Crescenzi [email protected] Università di Firenze Programmazione a oggetti p.1/32 Cosa è un oggetto Una scatola software

Подробнее

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo

Esempi al calcolatore su: 1) Costruttori ed ereditarietà 2) Subtyping e polimorfismo Esempi al calcolatore su: 1) 2) Subtyping e polimorfismo 1 Esempio 1: 2 Introduzione Java prevede due automatismi legati ai costruttori: Se una classe non ha costruttori viene creato automaticamente il

Подробнее

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à

Подробнее

Esercizi sul Monitor in Java. 22 Maggio 2015

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

Подробнее

IL LINGUAGGIO JAVA Input, Tipi Elementari e Istruzione Condizionale

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

Подробнее

Corso sul linguaggio Java

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

Подробнее

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

Подробнее

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

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

Подробнее

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo Programmazione Orientata agli Oggetti Emilio Di Giacomo e Walter Didimo Una metafora dal mondo reale la fabbrica di giocattoli progettisti Un semplice giocattolo Impara i suoni Dall idea al progetto Toy

Подробнее

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.

Подробнее

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

Подробнее

ACSO Programmazione di Sistema e Concorrente

ACSO Programmazione di Sistema e Concorrente ACSO Programmazione di Sistema e Concorrente P2 Modello Thread 2/12/2015 programma e parallelismo il tipo di parallelismo dipende dal grado di cooperazione (scambio di informazione) necessario tra attività

Подробнее

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

Подробнее

Alberi Binario in Java

Alberi Binario in Java Alberi Binario in Java Realizzare un albero binario di ricerca. L albero binario è di ricerca se esiste una relazione di ordinamento tra i valori dei nodi (valori comparabili). In particolare, dato un

Подробнее

La classe java.lang.object

La classe java.lang.object La classe java.lang.object In Java: Gerarchia di ereditarietà semplice Ogni classe ha una sola super-classe Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita

Подробнее

Laboratorio di Programmazione Lezione 4. Cristian Del Fabbro

Laboratorio di Programmazione Lezione 4. Cristian Del Fabbro Laboratorio di Programmazione Lezione 4 Cristian Del Fabbro Prossima lezione Mercoledì 25 novembre ore 8:30-11:00 Classe Una classe descrive degli oggetti tramite: Proprietà/variabili/campi (dati/caratteristiche,

Подробнее

Introduzione al Multithreading

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

Подробнее

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 [email protected] - lezione 14 - Thread in Java 1 Cos è un

Подробнее

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas

A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Classi e oggetti A. Lorenzi, A. Rizzi Java. Programmazione ad oggetti e applicazioni Android Istituto Italiano Edizioni Atlas Oggetti La programmazione orientata agli oggetti, OOP (Object-Oriented Programming),

Подробнее

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

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

Подробнее

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

Подробнее

Esempio su strutture dati dinamiche: ArrayList

Esempio su strutture dati dinamiche: ArrayList Esempio su strutture dati dinamiche: ArrayList 1 ArrayList Abbiamo detto che gli array non possono cambiare la propria dimensione: il numero di elementi contenuti viene stabilito al momento della creazione

Подробнее

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

Подробнее

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

Подробнее

Le eccezioni in Java

Le eccezioni in Java Eccezioni 1 Le eccezioni in Java i tipi di eccezione sono particolari classi che contengono solo il costruttore ci possono essere più costruttori overloaded sono definite in moduli separati da quelli che

Подробнее

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

Подробнее

Esercitazione. Docente Ing. Mariateresa Celardo

Esercitazione. Docente Ing. Mariateresa Celardo Esercitazione Docente Ing. Mariateresa Celardo [email protected] Scrivere la classe Motorino che ha i seguenti attributi colore: una stringa indicante il colore del motorino, velocità: un

Подробнее

Gestione delle eccezioni

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

Подробнее

Polimorfismo parametrico vs polimorfismo per inclusione

Polimorfismo parametrico vs polimorfismo per inclusione Polimorfismo parametrico vs polimorfismo per inclusione Esercizio Definire il tipo di dato Stack con operazioni Push( element ) Pop() Non forzare una specifica implementazione Non forzare un tipo specifico

Подробнее

I THREAD O PROCESSI LEGGERI

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

Подробнее