Multithreading in Java. Fondamenti di Sistemi Informativi 2014-2015



Documenti analoghi
Java Virtual Machine

Java threads (2) Programmazione Concorrente

GESTIONE DEI PROCESSI

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

Ottava Esercitazione. introduzione ai thread java mutua esclusione

Esercizi sugli Oggetti Monitor

Gestione dei thread in Java LSO 2008

Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D

Programmazione concorrente con il linguaggio Java

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:

Programmazione concorrente in Java

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

Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread

Telematica II 17. Esercitazione/Laboratorio 6

Java: Compilatore e Interprete

Concetto di Funzione e Procedura METODI in Java

Programmazione Orientata agli Oggetti in Linguaggio Java

Laboratorio di Sistemi Thread Java

19. Introduzione al multi-threading

Thread in Java. Thread = flusso di esecuzione indipendente nel codice del programma

I Thread. Sistema Operativo e Thread

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

I Thread. un thread è uno stream di esecuzione del programma

Programmazione a Oggetti Lezione 10. Ereditarieta

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

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

Esercitazione 2: Java Thread

Esercitazione 2: Java Thread. Java Thread. Java Thread. Un thread:

Esercizi sul Monitor in Java

Lezione 15 Programmazione multithreaded

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

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

Un esercizio d esame. Flavio De Paoli

SISTEMI OPERATIVI THREAD. Giorgio Giacinto Sistemi Opera=vi

Concorrenza e sincronizzazione

Synchronized (ancora)

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

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

Esercizi della lezione 5 di Java

Sincronizzazione con Java

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

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Pronto Esecuzione Attesa Terminazione

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

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

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

Tecnologie di Sviluppo per il Web

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

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

Corso di Linguaggi di Programmazione

Java Threads. esempi

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

Architettura MVC-2: i JavaBeans

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

Mul&programmazione. Ges&one dei processi. Esecuzione parallela. MAC OSX Monitoraggio a9vità. Linux System monitor. Windows Task Manager. A.

Java Thread. Thread. Un thread

appunti delle lezioni Architetture client/server: applicazioni server

Socket & RMI Ingegneria del Software - San Pietro

La Gestione delle risorse Renato Agati

Test di unità con JUnit4

Multithreading/2. Più richieste servite simultaneamente > 1 thread per ogni connessione client (+ 1 thread per accettare nuove richieste).

Java thread, concorrenza

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

Corso di Laurea in Ingegneria Informatica. Corso di Reti di Calcolatori A.A. 2009/2010

Multithreading. Multithreading/2

UnicastRemoteObject. Massimo Merro Programmazione di Rete 103 / 124

1 Processo, risorsa, richiesta, assegnazione 2 Concorrenza 3 Grafo di Holt 4 Thread 5 Sincronizzazione tra processi

SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE

Programmazione Concorrente in Java

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

2. I THREAD. 2.1 Introduzione

Sistemi Operativi (modulo di Informatica II) I processi

SISTEMI OPERATIVI. Sincronizzazione in Java (Monitor e variabili condizione in Java)

Esercizio Sincronizzazione Thread

Sistemi Operativi Esercizi Sincronizzazione

DESIGN PATTERNS Parte 6. State Proxy

La macchina di Von Neumann. Archite(ura di un calcolatore. L unità di elaborazione (CPU) Sequenza di le(ura. Il bus di sistema

RMI Remote Method Invocation

Progettazione : Design Pattern Creazionali

Multitheading. Corso di Laurea in Informatica. Sperimentazioni di Linguaggi di Programmazione: Paradigmi di Programmazione. a.a.

Scheduling della CPU Simulazione in linguaggio Java

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

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

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

Il costrutto monitor [Hoare 74]

L API socket ed i daemon

Algoritmi di Ricerca. Esempi di programmi Java

Inizializzazione, Assegnamento e Distruzione di Classi

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

Parola chiave extends

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

Compute engine generici in RMI

Reflection in Java. Linguaggi Corso M-Z - Laurea in Ingegneria Informatica A.A

Thread e Task. L20_MultiThread 2

Modulo 4: Ereditarietà, interfacce e clonazione

Un sistema operativo è un insieme di programmi che consentono ad un utente di

Algoritmi di scheduling

I THREAD O PROCESSI LEGGERI Generalità

Arduino: Programmazione

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

Transcript:

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 di Multithreading Un thread è un sottoprocesso computazionale. I thread sono più leggeri dei processi e sfruttano una comunicazione a memoria condivisa Diversi thread contenuti nello stesso processo condividono alcune risorse (memoria e file aperti), mentre processi differenti non condividono le loro risorse

Sistemi multiprocessore e multithreaded Un sistema multithreaded ha un singolo processore e il multithreading è generalmente implementato alternando l'esecuzione dei diversi thread in modo abbastanza frequente da dare all'utente la percezione che le attività siano eseguite allo stesso tempo. Multithreaded process http://en.wikipedia.org/wiki/file:multithreaded_process.svg Mentre, in un sistema multiprocessore o multi-core, i thread possono essere eseguiti realmente in maniera concorrente, sfruttando ogni processore o core per eseguire diversi thread contemporaneamente.

Alcuni Usi del multithreading Consente di velocizzare l'esecuzione dei programmi tramite parallelizzazione per sfruttare i moderni processori multi-core, condivisione di memoria e comunicazione fra thread più efficiente Consente di rendere più efficienti i programmi evitando che il flusso di esecuzione resti bloccato fino al termine di una attività, evento o rilascio di una risorsa. Per esempio è usato per realizzare applicazioni interattive implementando funzioni asincrone rispetto al normale flusso di esecuzione di un programma e web server che devono connettersi con più client contemporaneamente

Multi-threading in Java I programmi Java possono essere multi-threaded. Le piattaforme Java implementano il timeslicing, che consente a più thread di condivedere un processore In base ai valori di priority Esistono due metodi per implementare il multi-threading estendendo la classe Thread implementando l'interfaccia Runnable Il primo metodo è più semplice del secondo, ma meno flessibile. Il secondo permette di definire Thread che estendono altre classi (in Java si può estendere solo una classe!) e di utilizzare meccanismi più avanzati per la schedulazione di Thread

Metodo thread Il metodo più importante per la classe Thread è run(), che va sovrascritto per farlo comportare esattamente come vogliamo run( ) contiente il codice che sarà eseguito simultaneamente con gli altri thread in un programma il metodo start( ) nella classe Thread esegue delle operazioni di inizializzazione per il thread e poi chiama run( ) ATTENZIONE: è necessario sovrascrivere run() ma invocare start() che lancia il thread e ritorna immediatamente. Invocare direttamente il metodo run() blocca l'esecuzione del programma finché non termina run()

Esempio metodo thread public class HelloThread extends Thread { public void run() { System.out.println("Hello from a thread!"); public static void main(string args[]) { HelloThread hello = new HelloThread(); hello.start();

Metodo runnable La nuova classe deve implementare l'interfaccia Runnable e può eventualmente estendere un'altra classe. Il metodo run() va implementato nello stesso modo. Per poter eseguire un oggetto Runnable è necessario istanziare la classe Thread e passare tale oggetto come parametro al costruttore

Esempio metodo runnable public class HelloRunnable implements Runnable { public void run() { System.out.println("Hello from a thread!"); public static void main(string args[]) { HelloRunnable hello = new HelloRunnable(); Thread t = new Thread( hello); t.start();

Altri metodi della classe Thread getname / getpriority restituisce nome/priorità del thread setname / setpriority modifica nome/priorità del thread sleep sospende l'esecuzione del thread per m millisecondi; yield sospende l'esecuzione del thread corrente consentendo l'esecuzione di altri thread pronti e a uguale priorità join attende la terminazione del thread per eseguire altri thread

Synchronization La comunicazione fra thread avviene principalmente mediante condivisione di memoria, quindi accedendo agli stessi oggetti. È una forma di comunicazione estremamente efficiente, ma può causare problemi, fra cui: Thread Interference, modifica dello stesso dato simultaneamente Memory Consistency Errors, differenti thread hanno differenti viste dello stesso dato La sincronizzazione permette di prevenire tali problemi È possibile sincronizzare un metodo (Synchronized Methods) o blocchi di istruzioni (Synchronized Statements). Il secondo metodo consente di evitare di sincronizzare l'intero metodo e di specificare più precisamente quali oggetti sincronizzare migliorando la concorrenza con una sincronizzazione fine-grained (granularità più fine)

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

Fine-grained Synchronized Statements public class MsLunch { long c = 0; Object lock = new Object(); public void inc() { // qui potrebbero esserci altre istruzioni synchronized(lock1) { c++; // anche qui potrebbero esserci altre istruzioni

Sincronizzazione: uso del Monitor Il monitor permette di aggiungere una specifica della sincronizzazione fra i threads per mezzo dell invocazione dei seguenti metodi: wait() rilascia il lock sull'oggetto e sospende il thread che lo invoca in attesa di una notifica. notifyall() risveglia tutti i thread sospesi sull'oggetto in attesa di notifica. I thread risvegliati competono per acquisire il lock sull'oggetto. notify() risveglia un thread scelto casualmente tra quelli sospesi sull'oggetto in attesa di notifica. Il thread risvegliato compete per acquisire il lock sull'oggetto. Tali metodi devono essere invocati dall'interno di un metodo o blocco sincronizzato

Alcuni link utili Java tutorial http://docs.oracle.com/javase/tutorial/essential/concurrency/index.html Multi-threaded Client/Server Applications http://www.ase.md/~aursu/clientserverthreads.html