Corso sul linguaggio Java

Documenti analoghi
Programmazione Concorrente in Java

Multithreading in Java. Fondamenti di Sistemi Informativi

GESTIONE DEI PROCESSI

19. Introduzione al multi-threading

Compute engine generici in RMI

Java threads (2) Programmazione Concorrente

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

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Programmazione concorrente in Java

Telematica II 17. Esercitazione/Laboratorio 6

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

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

Gestione dei thread in Java LSO 2008

Multithreading in Java

Java Virtual Machine

Laboratorio di Programmazione di Rete Corso A

Corso di Programmazione Concorrente. Java Thread. Valter Crescenzi

Esercizi sul Monitor in Java

Thread in Java CAPITOLO Richiami di gestione di processi

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

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

T 1. Per un processo con più thread di controllo, lo stato di avanzamento della computazione di ogni thread è dato da:

Programmazione a oggetti e JAVA. Prof. B.Buttarazzi A.A. 2011/2012

Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1)

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

Gestione delle eccezioni in Java

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

Sincronizzazione con Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Esercizi Java. class somma2 { static int somma(int a,int b) {return a+b; }

UN CLONE IN CLIKE C-LIKE DI SEGUIVISIONE

appunti delle lezioni Architetture client/server: applicazioni server

Lezione 15 Programmazione multithreaded

Programmazione concorrente e threads

RMI Remote Method Invocation

Corso sul linguaggio Java

Main System Monitor Keyboard

Un esercizio d esame. Flavio De Paoli

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

TFA 42 Sistemi e Reti di Calcolatori per la Didattica

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

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

Corso sul linguaggio Java

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A Esercitazione. Programmazione Object Oriented in Java

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

Thread e Task. L20_MultiThread 2

Definizione di thread Proprietà dei thread in Java Gestione delle priorità nei programmi multithreaded Gruppi di thread Accesso a variabili condivise

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

Programmazione Orientata agli Oggetti in Linguaggio Java

I Canvas. import java.awt.*; import javax.swing.*; public class Graf{ public Graf () { JFrame f = new JFrame("Finestra"); // crea frame invisibile

Synchronized (ancora)

Laboratorio di Sistemi Thread Java

Esonero del corso di Programmazione a Oggetti

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

Architettura Client-Server

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

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

Parcheggio.rtf 1/8 6 gennaio Prova di programmazione: parcheggio a pagamento

Programmazione Orientata agli Oggetti in Linguaggio Java

Progetto Automi e Linguaggi Parser svliluppato con JLex e cup

esercizi Esercizi / problemi

Ingegneria del Software

Corso sul linguaggio Java

Ingegneria del Software

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

Programmazione distribuita

Corso di Informatica

Algoritmi di Ricerca. Esempi di programmi Java

Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144

RMI: metodi equals e hashcode

Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A lezione 14 - Thread in Java

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

Thread e Concorrenza in Java Swing

Corso di Reti di Calcolatori L-A

Grafico della parabola

Esercizi sugli Oggetti Monitor

sayhello public private protected return public class Greeter { public String sayhello() { String message = Hello, World! ; return message; } }

RMI. Java RMI RMI. G. Prencipe

Esercizi e soluzioni

56789:;<( !"#$%&'%()$(*+$,-../(0!+!( %( %11%2$/&$( .()"+)&%/&+%0,%/+"1+,22,3("'&%

Datagrammi. NOTA: MulticastSocket estende DatagramSocket

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

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

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

Programmazione ad Oggetti: JAVA. Esercitazione

Java Native Interface Appunti

Eccezioni 1 CASO: SENTIRE E GESTIRE UN ALLARME. Prof. Enrico Denti Università di Bologna A.A. 2012/ SITUAZIONI CRITICHE IL CONCETTO DI ECCEZIONE

LAVORI ESTIVI DI INFORMATICA PER LA CLASSE IV Sez. Ainf (Prof. Tessore Luca)

Threads e Concorrenza in Java Swing

13. Chain of Responsibility

Java RMI: Esempio Completo di un Applicazione Distribuita

Gestione delle eccezioni in Java

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

Java e Serializzazione dalla A all'xml di Leonardo Puleggi

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

INTRODUZIONE INTRODUZIONE JAVA JAVA

Supporto al Sistema Operativo

Le variabili. Olga Scotti

Prova d Esame Compito A

INFORMATICA GRAFICA - FONDAMENTI DI INFORMATICA Ing. Civile - Edile/Architettura Dott. Penzo SOLUZIONE PROVA SCRITTA DEL 16/09/2002.

Transcript:

Corso sul linguaggio Java Modulo JAVA9 B2 Multithreading 1 Prerequisiti Programmazione base in Java Significato di multithreading Concetti di base sui sistemi operativi Attesa attiva Attesa passiva 2 1

Introduzione In questa Unità approfondiamo il concetto di programmazione multithreading, attraverso esempi di applicazioni Java. In particolare, affrontiamo la differenza pratica tra attesa attiva e attesa passiva, l uso dell interfaccia Runnable (che consente il multithreading in ambiente grafico) ed un primo esempio di sincronizzazione, mediante il metodo join(). 3 Esempio con due thread public class MultiThread extends Thread { public void run() { System.out.println("Sono il thread " + this); public MultiThread() { // azioni per il costruttore public static void main (String args[]) { Thread t0 = new MultiThread(); Thread t1 = new MultiThread(); t0.setname( cip ); t1.setname( ciop ); t0.start(); t1.start(); Si creano due thread indipendenti Si assegna a ciascun thread un nome Le stampe di ciascun thread avvengono in modo casuale, in base alla politica dello schedulatore. I thread vengono avviati 4 2

Esempio con due thread I thread t0 e t1 potrebbero svolgere compiti diversi; frequente è il caso in cui vengono eseguite in modo concorrente operazioni multiple e indipendenti, con ovvi vantaggi rispetto ai tempi di esecuzione. I thread t0 e t1 vengono eseguiti in parallelo; evolvono in modo realmente parallelo su architetture HW multicore, multiprocessore o in ambiente operativo Window o Linux. I thread t0 e t1 possono: interagire e comunicare (argomento che vedremo in seguito) proseguire in modo totalmente indipendente. 5 Busy wait e sleep() Il ritardo casuale inserito nel metodo run() in molti dei precedenti esempi, produce un avanzamento casuale dei thread in gioco e può essere realizzato in due modi: Pone il thread in stato Not Runnable public static void sleep (long mstosleep) throws InterruptedException (come negli esempi precedenti) long starttime = System.currentTimeMillis(); long stoptime = starttime + 60000; while (System.currentTimeMillis() < stoptime) { // corpo del ciclo Sebbene i due metodi producano lo stesso effetto, il primo non coinvolge il processore (attesa passiva) e può essere interrotto, mentre il secondo ne prevede l uso (attesa attiva o busy wait) dovendo svolgere dei cicli. 6 3

Busy wait e sleep() public class ThreadSleep extends Thread { public void run() { for (int i = 0; i < 20; ++i) {System.out.println("Nuovo thread"); try { Thread.sleep (200); catch (InterruptedException e) { return; public static void main (String[] args) throws InterruptedException { new ThreadSleep().start(); for (int i = 0; i < 2000; ++i) System.out.println("Main thread"); Il thread va in attesa passiva (Not Runnable) e può essere interrotto. Il thread va in attesa attiva ed esegue di continuo. 7 Interfaccia Runnable Poiché le classi viste in precedenza ereditano da Thread e poiché Java non supporta l ereditarietà multipla, non possiamo costruire classi che ereditano ulteriormente da altre classi (es. Canvas) 1 Come si può risolvere il problema? 2 1. Creare una classe che implementa l interfaccia java.lang.runnable e implementare in essa il metodo run() 2. creare un istanza di Thread passandogli un istanza della classe Runnable e richiamare su essa il metodo start(). 8 4

Uso dell interfaccia Runnable Vediamo l uso di Runnable in un applicazione che lancia 2 thread di classe EsempioThread che procedono in modo indipendente. public class EsempioRunnable { public static void main( String args[] ) { Runnable t1 = new EsempioThread("thread1"), t2 = new EsempioThread("thread2"); Thread thread1 = new Thread (t1), thread2 = new Thread (t2), System.out.println( Ora avvio i thread " ); thread1.start(); thread2.start(); Crea due oggetti Runnable Crea due oggetti Thread ereditati da Runnable 9 Interfaccia Runnable class EsempioThread implements Runnable { String name; È sempre preferibile usare public EsempioThread( String name ) l interfaccia Runnable anche quando non si vuole ereditare { this.name = name; da altre classi, come mostra public void run() questo esempio. { for (int i = 0; i < 5; ++i) { System.out.println (name + " : in esecuzione."); try { Thread.sleep (sleeptime); catch (InterruptedException e) { System.err.println( name + " finito" ); 10 5

Thread e grafica Grazie all interfaccia Runnable, i thread e la grafica possono essere utilizzati insieme per realizzare applicazioni grafiche concorrenti, alla base di molti programmi di videogioco, simulazione e realtà virtuale. Vediamo un esempio: due palline di colore diverso, si muovono a velocità diverse, su due percorsi distinti. Ogni pallina opera in un frame distinto e il movimento di ognuna di esse è controllato da un thread apposito. 11 Applicazione DuePalline - il main() import java.awt.*; public class DuePalline { public static void main (String args[]) { Frame f1=new Frame("Pallino blu"); caratteristiche del frame; creazione oggetto mobile t1 derivato da Runnable;; f1.add(t1); Thread muovi1= new Thread (t1); // creazione thread per t1 f1.setvisible(true); muovi1.start(); // avvio thread t1 analoghe operazioni per il frame f2; // end main // end class 12 6

Applicazione DuePalline - la classe oggettomobile class oggettomobile extends Canvas implements Runnable { int pos_iniz, // posizione iniziale pos, // posizione corrente raggio; // dimensione pallina double velocita; // velocità della pallina Color colore; // colore pallina public oggettomobile(int x, int r, double v, Color c) { pos_iniz=x; // costruttore pallina raggio=r; velocita=v; colore=c; public void run() { // metodo da ridefinire public void paint (Graphics g) { // disegna la pallina // end class oggetto mobile 13 Applicazione DuePalline - il metodo run() public void run() { while (true) // ciclo continuo { for (pos=pos_iniz;pos<=300;pos+=1) // avanza a destra { try { repaint(); // effetto animazione Thread.sleep((int)(1/velocita)); // sleep(msec) catch (Exception e) { System.out.println("Errore"); 14 7

Applicazione DuePalline - il metodo paint() public void paint (Graphics g) // disegna la pallina con { //...gli attributi impostati g.setcolor(colore); g.filloval(pos, 10, raggio/2, raggio/2); 15 Esempio di sincronizzazione Consideriamo un applicazione SommaProdotto che lancia due thread: il primo fa la somma s di 2 numeri; il secondo fa il prodotto p di 2 numeri. La procedura SommaProdotto evidentemente esegue in parallelo il calcolo di s e di p e deve stamparne la somma. Cosa è necessario che faccia la procedura Espressione per funzionare correttamente? Il processo padre deve attendere che entrambi i thread s e p terminino e gli comunichino i propri risultati, realizzando quindi una prima forma di sincronizzazione. 16 8

Esempio di sincronizzazione public class SommaProdottoJoin { static int totale, somma, prodotto; public void setsomma(int s) { somma = s; public void setprodotto(int p) { prodotto=p; public static void main (String[] args) throws Exception { sommathread st = new sommathread("sommatore", 4, 5); prodottothread pt = new prodottothread("moltiplicatore", 3, 7); st.start(); // avvia thread pt.start(); // avvia thread st.join(); pt.join(); System.out.println("Totale = " + (somma+prodotto)); Il metodo join() sincronizza il processo padre con i due thread. L istanza del metodo join() mette il thread corrente in attesa della terminazione del thread su cui si istanzia. 17 Esempio di sincronizzazione class sommathread extends Thread La classe sommathread si occupa del calcolo della somma. { int x, y, somma; String nome; public sommathread (String n, int x, int y) { nome=n; this.x=x; this.y=y; public void run() { try { Thread.sleep(1000); // attesa somma = x + y; System.out.println("Esegue " + nome + "\t somma = " + somma); SommaProdottoJoin sp = new SommaProdottoJoin(); sp.setsomma(somma); catch (Exception e) {System.out.println("Errore..."); Riporta il risultato nel thread padre 18 9

Esempio di sincronizzazione class prodottothread extends Thread La classe prodottothread si { int x, y, prodotto; occupa del calcolo del prodotto. String nome; public prodottothread (String n, int x, int y) { nome=n; this.x=x; this.y=y; public void run() { try { Thread.sleep(1000); // attesa prodotto = x * y;; System.out.println("Esegue " + nome + "\t prodotto = " + prodotto); SommaProdottoJoin sp = new SommaProdottoJoin(); sp.setprodotto(prodotto); catch (Exception e) {System.out.println("Errore..."); Riporta il risultato nel thread padre 19 Esempio di sincronizzazione Il vantaggio in termini di tempo di esecuzione delle applicazioni parallele si può facilmente verificare. Ad esempio: 1. cronometrare l applicazione SommaProdottoJoin precedente, che opera in parallelo 2. cronometrare un analoga applicazione che faccia la stessa cosa, in modo sequenziale. 3. confrontare i tempi ottenuti. 20 10

Argomenti Esempio con due thread Esempio di multithreading Busy wait e sleep() Interfaccia Runnable Thread e grafica Applicazione DuePalline il main() la classe oggettomobile il metodo run() il metodo paint() Esempio di sincronizzazione 21 Altre fonti di informazione P.Gallo, F.Salerno Informatica Generale 1, ed. Minerva Italica M.Romagnoli, P.Ventura Linguaggio C/C++, ed. Petrini M. Bigatti Il linguaggio Java, ed. Hoepli 22 11