Programmazione Java Threads
|
|
|
- Annalisa Giannini
- 10 anni fa
- Просмотров:
Транскрипт
1 Programmazione Java Threads Amleto Di Salle Dipartimento di Ingegneria e Scienze dell Informazione e Matematica Università degli Studi dell Aquila [email protected].
2 Sommario 2 2» Cosa è: Processo» Cosa è: Thread» Thread in Java» Ciclo di vita» Scheduling» Metodi: yield, sleep, interrupt, join» Condivisione di risorse: synchronized, metodi wait, notify, notifyall» Esempio: Knock-Knock client-server
3 Cosa è: Processo 3 3» Ambiente di esecuzione self-contained con un proprio insieme di risorse > Memoria > Dati: Stack e heap > Codice» Processi comunicano tra di loro per realizzare compiti complessi (Inter-process comunication, socket)
4 Cosa è: Thread 4 4» Detto anche processo leggero, è una unità di esecuzione che consiste > Stack > Un insieme di registri» Condivide con altri thread la sezione codice, la sezione dati (heap), e le risorse che servono per la loro esecuzione» Rendono più efficiente l esecuzione di attività che condividono lo stesso codice» Context-switch è più veloce rispetto a quello dei processi» I thread non sono tra loro indipendenti perché condividono codice e dati» E necessario che le operazioni non generino conflitti tra i diversi thread di un task
5 Cosa è: Thread 5 5
6 Thread in Java 6 6» Tutti i programmi Java comprendono almeno un thread» Un programma costituito solo dal metodo main viene eseguito come un singolo thread» Java fornisce > Classi e interfacce che consentono di creare e manipolare thread aggiuntivi nel programma > Meccanismi nel linguaggio per la sincronizzazione delle risorse
7 Thread in Java 7 7» Esistono due modi per implementare in Java un thread > Definire una classe estendola dalla classe java.lang.thread > Definire una classe implementando l interfaccia java.lang.runnable (Vedi SimpleThread.java)
8 Esempio 8 8 public class SimpleThread extends Thread { private int countdown = 5; private static int threadcount = 0; public SimpleThread() { super("" + ++threadcount); // Store the thread name start(); public String tostring() { return "#" + getname() + ": " + countdown; public void run() { while(true) { System.out.println(this); if(--countdown == 0) return; public static void main(string[] args) { for(int i = 0; i < 5; i++) new SimpleThread();
9 Esempio public class SimpleThread implements Runnable { 9 9 private int countdown = 5; private static int threadcount = 0; private String name; public SimpleThread() { this.name = "# SimpleThread(" + ++threadcount + ")"; public String tostring() { return name + ": " + countdown; public void run() { while (true) { System.out.println(this); if (--countdown == 0 ) return; public static void main(string[] args) { for (int i = 0; i < 5; i++) { new Thread(new SimpleThread()).start();
10 Ciclo di vita di un thread (1)
11 Ciclo di vita di un thread (2) Thread clockthread = new Thread(this, "Clock"); //this oggetto che implementa Runnable clockthread.start();» New Thread > Thread in tale stato è un oggetto vuoto ovvero nessuna risorsa di sistema è stata ancora allocata > Unico metodo invocabile è start > L invocazione di qualsiasi altro metodo causa l eccezione IllegalThreadStateException» Runnable > Metodo start crea le risorse di sistema necessarie per eseguire il thread e invoca il metodo run()» Not Runnable: E in tale stato a seguito di uno dei seguenti eventi > Metodo sleep invocato > Viene invocato il metodo wait al verificarsi di una determinata condizione > Thread in blocco su una operazione di I/O» Dead > Metodo usuale è il termine dell esecuzione del metodo run > All interno della classe Thread esiste il metodo stop NON UTILIZZARE
12 Testing stato dei Thread» In Java 5 è stato introdotto il metodo getstate all interno della classe Thread. Il valore ritornato è > NEW > RUNNABLE > BLOCKED > WAITING > TIMED_WAITING > TERMINATED» Inoltre, esiste (prima della versione 5) il metodo isalive > Ritorna true se il thread è started ma non è stopped (stato Runnable o Not Runnable) > Ritorna false se il thread è negli stati New Thread o Dead > Non è possibile differenziare tra i vari stati
13 Scheduling (1) » Il sistema di run-time di Java supporta un semplice algoritmo di scheduling chiamato a priorità-fissa» L algoritmo schedula i thread con lo stato Runnable sulla base della loro priorità» Quando un thread viene creato eredita la priorità del thread che lo sta creando. E possibile modificare la priorità utiilzzando il metodo setpriority (costanti MIN_PRIORITY e MAX_PRIORITY definite all interno della classe Thread)» In un dato istante di tempo quando deve essere determinato il thread da eseguire, il sistema di run-time sceglie il thread con stato Runnable con priorità più alta» Soltanto quando il thread finisce, oppure viene invocato il metodo yield oppure diventa Not Runnable un thread con priorità più bassa viene eseguito.» Se vi sono thread con la stessa priorità lo scheduler ne sceglie arbitrariamente uno
14 Scheduling (2) » Il thread scelto viene eseguito finché una delle seguenti condizioni si verificano > Un thread con priorità più alta diventa Runnable > Viene invocato il metodo yield oppure termina il metodo run > Nei sistemi che supportano il time-slicing, lo slot di tempo del thread è terminato» Lo scheduler è anche preemptive ovvero che se in un determinato istante di tempo un thread con priorità più alta diventa Runnable allora il sistema di runtime sceglie quello con priorità più alta (il nuovo thread si dice che preempt gli altri thread)» Nota In un determinato istante di tempo il thread con priorità più alta viene eseguito. Tuttavia questo non è garantito ovvero lo scheduler potrebbe scegliere un thread con priorità più bassa per eliminare starvation. Utilizzare la priorità soltanto per ragioni di eventuale efficienza e non di correttezza
15 Scheduling (3) public class SelfishRunner extends Thread { private int tick = 1; private int num = 0; public SelfishRunner(int num) { this.num = num; public void run() { while (tick < ) { tick++; if ((tick % 50000) == 0) { System.out.format("Thread #%d, tick = %d%n", num, tick);
16 Scheduling (4) public class RaceTest { private final static int NUMRUNNERS = 2; public static void main(string[] args) { SelfishRunner[] runners = new SelfishRunner[NUMRUNNERS]; for (int i = 0; i < NUMRUNNERS; i++) { runners[i] = new SelfishRunner(i); runners[i].setpriority(2); for (int i = 0; i < NUMRUNNERS; i++) runners[i].start();
17 yield()» Serve per dare un suggerimento allo scheduler in modo che possa assegnare la CPU ad un altro thread public class YieldingThread extends Thread { private int countdown = 5; private static int threadcount = 0; public YieldingThread() { super("" + ++threadcount); start(); public String tostring() { return "#" + getname() + ": " + countdown; public void run() { while(true) { System.out.println(this); if(--countdown == 0) return; yield(); public static void main(string[] args) { for(int i = 0; i < 5; i++) new YieldingThread();
18 sleep() e interrupt()» Si può mettere un thread in uno stato d'attesa con il metodo statico sleep che prende il numero di millisecondi da aspettare > Un oggetto può ottenere il suo thread d'esecuzione usando il metodo Thread.currentThread() » Se un thread è in stato d'attesa, lo si può svegliare chiamando il metodo interrupt > Tale metodo genera un'eccezione InterruptedException. Per questo è necessario ogni volta che si fa uno sleep prevedere l'eccezione InterruptedException
19 join()» Un thread puo invocare il metodo join() di un altro thread per attendere la terminazione di quest ultimo prima di proseguire con l esecuzione» Se un thread chiama t.join() su un altro thread t, il thread chiamante viene sospeso finché il thread t non ha terminato l esecuzione» E possibile utilizzare un altra versione di join() che consente di specificare un tempo limite entro il quale attendere la terminazione (espresso in millisecondi o in millisecondi e nanosecondi). Se il thread sul quale è invocata l operazione non termina entro il periodo di tempo fissato il metodo restituisce il controllo al chiamante» join() puo essere interrotta chiamando il metodo interrupt() sul thread chiamante quindi è necessario racchiudere la chiamata join dentro un blocco try/catch
20 Esempio public class SleepingThread extends Thread { private int countdown = 5; private static int threadcount = 0; public SleepingThread() { super("" + ++threadcount); start(); public String tostring() { return "#" + getname() + ": " + countdown; public void run() { while(true) { System.out.println(this); if(--countdown == 0) return; try { sleep(1000); catch (InterruptedException e) { throw new RuntimeException(e); public static void main(string[] args) throws InterruptedException { for(int i = 0; i < 5; i++) new SleepingThread();
21 Esempio public class SleepingThread extends Thread { private int countdown = 5; private static int threadcount = 0; public SleepingThread() { super("" + ++threadcount); start(); public String tostring() { return "#" + getname() + ": " + countdown; public void run() { while(true) { System.out.println(this); if(--countdown == 0) return; try { sleep(1000); catch (InterruptedException e) { throw new RuntimeException(e); public static void main(string[] args) throws InterruptedException { for(int i = 0; i < 5; i++) new SleepingThread().join();
22 Esempio class Sleeper extends Thread { private int duration; public Sleeper(String name, int sleeptime) { super(name); duration = sleeptime; start(); public void run() { try { sleep(duration); catch (InterruptedException e) { System.out.println(getName() + " was interrupted. " + "isinterrupted(): " + isinterrupted()); return; System.out.println(getName() + " has awakened");
23 Esempio class Joiner extends Thread { private Sleeper sleeper; public Joiner(String name, Sleeper sleeper) { super(name); this.sleeper = sleeper; start(); public void run() { try { sleeper.join(); catch (InterruptedException e) { throw new RuntimeException(e); System.out.println(getName() + " join completed");
24 Esempio public class Joining { public static void main(string[] args) { Sleeper sleepy = new Sleeper("Sleepy", 1500), grumpy = new Sleeper("Grumpy", 1500); Joiner dopey = new Joiner("Dopey", sleepy), doc = new Joiner("Doc", grumpy); grumpy.interrupt();
25 Condividere risorse » Nel caso di multi-threading potrebbe capitare di avere più thread che tentano di utilizzare nello stesso momento la stessa risorsa» Tale situazione di programmazione è detta scenario produttore-consumatore ovvero un produttore (thread) genera uno stream di dati che un consumatore utilizza» Esempi > Thread che legge caratteri dalla tastiera che li inserisce in una coda di eventi che un thread consumatore legge tali eventi > Thread scrive dati su un file e un altro thread legge dal file
26 Esempio 1 (1) class Watcher extends Thread { private AlwaysEven ae; public Watcher(AlwaysEven ae) { this.ae = ae; public void run() { while(true) { int val = ae.getvalue(); if(val % 2!= 0) { System.out.println(val); System.exit(0); public class AlwaysEven { private int i; public void next() { i++; i++; public int getvalue() { return i; public static void main(string[] args) { final AlwaysEven ae = new AlwaysEven(); Watcher w = new Watcher(ae); w.start(); while(true) ae.next();
27 Esempio 1 (2) class Watcher extends Thread { private AlwaysEven ae; public Watcher(AlwaysEven ae) { this.ae = ae; public void run() { while(true) { int val = ae.getvalue(); if(val % 2!= 0) { System.out.println(val); System.exit(0); public class AlwaysEven { private int i; public synchronized void next() { i++; i++; public int getvalue() { return i; public static void main(string[] args) { final AlwaysEven ae = new AlwaysEven(); Watcher w = new Watcher(ae); w.start(); while(true) ae.next();
28 Esempio 1 (3) class Watcher extends Thread { private AlwaysEven ae; public Watcher(AlwaysEven ae) { this.ae = ae; public void run() { while(true) { int val = ae.getvalue(); if(val % 2!= 0) { System.out.println(val); System.exit(0); public class AlwaysEven { private int i; public synchronized void next() { i++; i++; public synchronized int getvalue() { return i; public static void main(string[] args) { final AlwaysEven ae = new AlwaysEven(); Watcher w = new Watcher(ae); w.start(); while(true) ae.next();
29 Esempio 2 (1)» Producer > Genera un intero tra 0 e 9 (compreso) e lo memorizza all interno dell oggetto CubbyHole > Per rendere l esempio più interessante si addormenta (sleep) per un tempo random tra 0 e 100 millisecondi prima di ripetere il ciclo di generazione del numero» Consumer > Consuma tutti gli interi dall oggetto CubbyHole (è lo stesso oggetto del Producer) non appena diventa disponibile
30 Esempio 2 (2) public class Producer extends Thread { private CubbyHole cubbyhole; private int number; public Producer(CubbyHole c, int number) { cubbyhole = c; this.number = number; public void run() { for (int i = 0; i < 10; i++) { cubbyhole.put(number, i); try { sleep((int)(math.random() * 100)); catch (InterruptedException e) {
31 Esempio 2 (3) public class Consumer extends Thread { private CubbyHole cubbyhole; private int number; public Consumer(CubbyHole c, int number) { cubbyhole = c; this.number = number; public void run() { int value = 0; for (int i = 0; i < 10; i++) { value = cubbyhole.get(number);
32 Esempio 2 (4) public class CubbyHole { private int contents; private boolean available = false; public synchronized int get(int who) { while (available == false) { try { wait(); catch (InterruptedException e) { available = false; System.out.format("Consumer %d got: %d%n", who, contents); notifyall(); return contents; public synchronized void put(int who, int value) { while (available == true) { try { wait(); catch (InterruptedException e) { contents = value; available = true; System.out.format("Producer %d put: %d%n", who, contents); notifyall();
33 Esempio 2 (5) public class ProducerConsumerTest { public static void main(string[] args) { CubbyHole c = new CubbyHole(); Producer p1 = new Producer(c, 1); Consumer c1 = new Consumer(c, 1); p1.start(); c1.start();
34 wait()» Si trova all interno della classe Object e non di Thread » Causa il blocco del thread corrente (stato Not Runnable) fino a quando un altro thread invoca il metodo notify o notifyall per quell oggetto» Il thread corrente deve avere un lock (semaforo rosso) sull oggetto ovvero il wait deve essere invocato all interno di un metodo (o di un blocco) sincronizzato altrimenti viene sollevata un eccezione IllegalMonitorStateException» L invocazione di wait rilascia il lock sull oggetto permettendo ad un altro thread di acquisire il lock su quell oggetto» Altri metodi > wait(long timeout): come wait() soltanto che passati timeout millisecondi il thread viene risvegliato > wait(long timeout, int nanos): Si possono specificare anche i nanosecondi
35 notify, notifyall» Si trovano all interno della classe Object e non di Thread» notify > Sveglia un singolo thread che è in attesa sul monitor dell oggetto > Se vi sono diversi thread in waiting sull oggetto ne viene scelto uno a caso » Una volta svegliato il thread competerà con gli altri thread nel riprendere la risorsa condivisa» notifyall > E come notify soltanto che sveglia tutti gli eventuali thread in wait
36 Riacquisto di un lock» Un thread puo invocare un metodo sincronizzato su un oggetto per il quale è già mantenuto il lock riacquistando perciò il lock» Tale caratteristi elimina la possibilità per un singolo thread di mettersi in wait per un lock che già ha» Esempio public class Reentrant { public synchronized void a() { b(); System.out.format("Here I am, in a().%n"); public synchronized void b() { System.out.format("Here I am, in b().%n");» Java supporta il lock rientrante quindi l invocazione di b() all interno di a() non causa un deadlock
37 Esempio: Knock-Knock client-server (1) import java.net.*; import java.io.*; public class KKMultiServer { public static void main(string[] args) throws IOException { ServerSocket serversocket = null; boolean listening = true; try { serversocket = new ServerSocket(4444); catch (IOException e) { System.err.println("Could not listen on port: 4444."); System.exit(-1); while (listening) new KKMultiServerThread(serverSocket.accept()).start(); serversocket.close();
38 Esempio: Knock-Knock client-server (2) import java.net.*; import java.io.*; public class KKMultiServerThread extends Thread { private Socket socket = null; public KKMultiServerThread(Socket socket) { super("kkmultiserverthread"); this.socket = socket; public void run() { try { PrintWriter out = new PrintWriter(socket.getOutputStream(), true); BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); String inputline, outputline; KnockKnockProtocol kkp = new KnockKnockProtocol(); outputline = kkp.processinput(null); out.println(outputline); while ((inputline = in.readline())!= null) { outputline = kkp.processinput(inputline); out.println(outputline); if (outputline.equals("bye")) break; out.close(); in.close(); socket.close(); catch (IOException e) { e.printstacktrace();
39 Esempio: Knock-Knock client-server (3) import java.net.*; import java.io.*; public class KnockKnockProtocol { private static final int WAITING = 0; private static final int SENTKNOCKKNOCK = 1; private static final int SENTCLUE = 2; private static final int ANOTHER = 3; private static final int NUMJOKES = 5; private int state = WAITING; private int currentjoke = 0; private String[] clues = { "Turnip", "Little Old Lady", "Atch", "Who", "Who" ; private String[] answers = { "Turnip the heat, it's cold in here!", "I didn't know you could yodel!", "Bless you!", "Is there an owl in here?", "Is there an echo in here?" ; public String processinput(string theinput) { String theoutput = null; if (state == WAITING) { theoutput = "Knock! Knock!"; state = SENTKNOCKKNOCK; else if (state == SENTKNOCKKNOCK) { if (theinput.equalsignorecase("who's there?")) { theoutput = clues[currentjoke]; state = SENTCLUE; else { theoutput = "You're supposed to say \"Who's there?\"! " + "Try again. Knock! Knock!"; else if (state == SENTCLUE) { if (theinput.equalsignorecase(clues[currentjoke] + " who?")) { theoutput = answers[currentjoke] + " Want another? (y/n)"; state = ANOTHER; else { theoutput = "You're supposed to say \"" + clues[currentjoke] + " who?\"" + "! Try again. Knock! Knock!"; state = SENTKNOCKKNOCK; else if (state == ANOTHER) { if (theinput.equalsignorecase("y")) { theoutput = "Knock! Knock!"; if (currentjoke == (NUMJOKES - 1)) currentjoke = 0; else currentjoke++; state = SENTKNOCKKNOCK; else { theoutput = "Bye."; state = WAITING; return theoutput;
40 Esempio: Knock-Knock client-server (4) import java.io.*; import java.net.*; public class KnockKnockClient { public static void main(string[] args) throws IOException { Socket kksocket = null; PrintWriter out = null; BufferedReader in = null; try { kksocket = new Socket("localhost", 4444); out = new PrintWriter(kkSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream())); catch (UnknownHostException e) { System.err.println("Don't know about host: taranis."); System.exit(1); catch (IOException e) { System.err.println("Couldn't get I/O for the connection to: localhost."); System.exit(1); BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); String fromserver; String fromuser; while ((fromserver = in.readline())!= null) { System.out.println("Server: " + fromserver); if (fromserver.equals("bye.")) break; fromuser = stdin.readline(); if (fromuser!= null) { System.out.println("Client: " + fromuser); out.println(fromuser); out.close(); in.close(); stdin.close(); kksocket.close();
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à
(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP
(VHUFLWD]LRQLGLEDVHVXOOH6RFNHWLQ-DYD 6RFNHWGLWLSRVWUHDP D (FKR&OLHQWH6HUYHU Sviluppare un applicazione C/S in cui: il server attende una connessione da parte del client (su MDYDQHW6HUYHU6RFNHW), usa la
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
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
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
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
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
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
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
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
Definizione di thread Proprietà dei thread in Java Gestione delle priorità nei programmi multithreaded Gruppi di thread Accesso a variabili condivise
CEFRIEL Centro per la Formazione e la Ricerca in Ingegneria dell Informazione Politecnico di Milano Java Multithreading Programmazione concorrente in Java Docente: Diego Peroni [email protected] Indice
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
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
Applicazioni web. Parte 5 Socket
Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Applicazioni web Parte 5 Michele Tomaiuolo [email protected] Protocolli Internet I computer
Sincronizzazione con Java
Sincronizzazione con Java Corse critiche e sincronizzazione Java implementa un meccanismo simile al monitor per garantire la sincronizzazione fra thread Ogni oggetto ha un lock associato ad esso Nelle
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.
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
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
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
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
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
Architettura Client-Server
Architettura Client-Server 1. il client manda una richiesta al server 2. il server (in attesa) riceve la richiesta 3. il server esegue il servizio richiesto (generando un thread concorrente) 4. il server
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
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
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.
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
Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread
Terza Esercitazione Unix System Call Exec Java Introduzione Thread Stefano Monti [email protected] Unix - Esercizio 1 Scrivere un programma C con la seguente interfaccia:./compilaedesegui
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
Corso di Programmazione Concorrente. Java Thread. Valter Crescenzi http://crescenzi.dia.uniroma3.it
Corso di Programmazione Concorrente Java Thread Valter Crescenzi http://crescenzi.dia.uniroma3.it Sommario Java Thread e supporto alla PC della piattaforma Java Creazione di Thread con java.lang.thread
Corso di Reti di Calcolatori L-A
Università degli Studi di Bologna Facoltà di Ingegneria Corso di Reti di Calcolatori L-A Esercitazione 2 (svolta) Socket Java con connessione Luca Foschini Anno accademico 2009/2010 Esercitazione 2 1 Architettura
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
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.
7 Esercitazione (svolta): Callback. Polling. Java RMI: callback. Server. Server. Client. Client. due possibilità:
7 Esercitazione (svolta): due possibilità: Java RMI: callback Molte applicazioni richiedono un meccanismo publish/subscribe I partecipanti (client) necessitano di notifiche da parte del coordinatore (server)
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
Gestione delle Eccezioni
Gestione delle Eccezioni Condizioni di Errore Una condizione di errore in un programma può avere molte cause Errori di programmazione Divisione per zero, cast non permesso, accesso oltre i limiti di un
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
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,
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.
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/
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
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
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
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
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
Programmazione concorrente e threads
Programmazione concorrente e threads Programmazione concorrente Un programma concorrente è un programma nel quale diverse computazioni possono essere eseguite allo stesso tempo Alcuni sistemi sono implicitamente
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
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
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
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");
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
Tecnologie Web L-A. Java e HTTP. Dario Bottazzi Tel. 051 2093541, E-Mail: [email protected], SkypeID: dariobottazzi. Java e TCP/IP in a Nutshell
Tecnologie Web L-A Java e HTTP Dario Bottazzi Tel. 051 2093541, E-Mail: [email protected], SkypeID: dariobottazzi Java e TCP/IP in a Nutshell! java.net.inetaddress: rappresenta un indirizzo IP e
Esercitazione 6. Tutor: Ing. Diego Rughetti. Anno Accademico 2007/2008
Dipartimento di Informatica e Sistemistica Antonio Ruberti Sapienza Università di Roma Esercitazione 6 Corso di Tecniche di programmazione Laurea in Ingegneria Informatica (Canale di Ingegneria delle Reti
Lezione 15 Programmazione multithreaded
Lezione 15 Programmazione multithreaded Tutti i sistemi operativi, al giorno d'oggi, permettono di svolgere più operazioni simultaneamente. In questo momento, ad esempio, sto usando un word processor per
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
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à
1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi?
1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi? 1. La nozione di multiprogrammazione prevede la possibilità di
Esercitazioni Ingegneria del So2ware 8 Threads. Giordano Tamburrelli [email protected] 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
Parte II: Reti di calcolatori Lezione 10
Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A. 2013-14 Pietro Frasca Parte II: Reti di calcolatori Lezione 10 Giovedì 3-04-2014 1 Reti per la distribuzione
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
appunti delle lezioni Architetture client/server: applicazioni server
Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture /: applicazioni 1 La logica dei Abbiamo visto che un applicazione si connette e comunica con un applicazione mediante
Operazioni di input/output. Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni
Operazioni di input/output Prof. Francesco Accarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni Input /Output introduzione Per ottenere delle informazioni un programma apre un flusso (Stream)
Corsi di Reti di Calcolatori (Docente Luca Becchetti)
Corsi di Reti di Calcolatori (Docente Luca Becchetti) NOT : le soluzioni proposte sono volutamente sintetiche. Lo studente dovrebbe fare uno sforzo per risolvere i quesiti in modo autonomo, espandendo
Un programma concorrente è un programma nel quale diverse computazioni possono essere eseguite allo stesso tempo Alcuni sistemi sono implicitamente
Un programma concorrente è un programma nel quale diverse computazioni possono essere eseguite allo stesso tempo Alcuni sistemi sono implicitamente concorrenti: Concorrenza in database query caching delle
20 - Input/Output su File
20 - Input/Output su File 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
Sistemi Operativi Kernel
Approfondimento Sistemi Operativi Kernel Kernel del Sistema Operativo Kernel (nocciolo, nucleo) Contiene i programmi per la gestione delle funzioni base del calcolatore Kernel suddiviso in moduli. Ogni
Scheduling. Sistemi Operativi e Distribuiti A.A. 2004-2005 Bellettini - Maggiorini. Concetti di base
Scheduling Sistemi Operativi e Distribuiti A.A. 2-25 Bellettini - Maggiorini Concetti di base Il massimo utilizzo della CPU si ottiene mediante la multiprogrammazione Ogni processo si alterna su due fasi
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
ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete
ProgettAzione tecnologie in movimento - V anno Unità 4 - Realizzare applicazioni per la comunicazione in rete Compito in classe proposto Realizzare un applicazione C/S per trasferire al Client il contenuto
Modello dei processi. Riedizione delle slide della Prof. Di Stefano
Modello dei processi Riedizione delle slide della Prof. Di Stefano 1 Processi Modello di Processi asincroni comunicanti Process Scheduling Operazioni sui Processi Cooperazione tra Processi Interprocess
Il Sistema Operativo
Il Sistema Operativo Il Sistema Operativo Il Sistema Operativo (S.O.) è un insieme di programmi interagenti che consente agli utenti e ai programmi applicativi di utilizzare al meglio le risorse del Sistema
Il descrittore di processo (PCB)
Il descrittore di processo (PC) Il S.O. gestisce i processi associando a ciascuno di essi un struttura dati di tipo record detta descrittore di processo o Process Control lock (PC) Il PC contiene tutte
Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo
Sistema Operativo Fondamenti di Informatica 1 Il Sistema Operativo Il Sistema Operativo (S.O.) è un insieme di programmi interagenti che consente agli utenti e ai programmi applicativi di utilizzare al
Università degli Studi di Modena e Reggio Emilia. Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB. Http con java, URL
Università degli Studi di Modena e Reggio Emilia Facoltà di Ingegneria Reggio Emilia CORSO DI TECNOLOGIE E APPLICAZIONI WEB Http con java, URL Ing. Marco Mamei Anno Accademico 2004-2005 M. Mamei - Tecnologie
SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE
SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software
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)?
Flussi, lettori e scrittori
Flussi, lettori e scrittori Per sequenze di byte, InputStream, OutputStream e loro sottoclassi. Es: InputStream in = ; int next = in. read(); if (next!= -1) byte b = (byte) next; Per sequenze di caratteri,
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
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
Organizzazione della lezione. Lezione 18 Remote Method Invocation - 6. (con callback) L accesso al registry per il rebind()
Organizzazione della lezione Lezione 18 Remote Method Invocation - 6 Vittorio Scarano Corso di Programmazione Distribuita (2003-2004) Laurea di I livello in Informatica Università degli Studi di Salerno
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
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
