A cosa si riferisce un monitor nella programmazione concorrente in Java?
Quando leggo che "ogni oggetto ha associato un monitor" che cosa significa?
È un oggetto speciale?
A cosa si riferisce un monitor nella programmazione concorrente in Java?
Quando leggo che "ogni oggetto ha associato un monitor" che cosa significa?
È un oggetto speciale?
Risposte:
Un monitor è un meccanismo per controllare l'accesso simultaneo a un oggetto.
Questo ti permette di fare:
Discussione 1:
public void a()
{
synchronized(someObject) {
// do something (1)
}
}
Discussione 2:
public void b()
{
synchronized(someObject) {
// do something else (2)
}
}
Ciò impedisce ai thread 1 e 2 di accedere contemporaneamente alla sezione monitorata (sincronizzata). Uno verrà avviato e il monitor impedirà all'altro di accedere alla regione prima che il primo termini.
Non è un oggetto speciale. È meccanismo di sincronizzazione posta alla radice gerarchia di classi: java.lang.Object
.
Ci sono anche wait
e notify
metodi che anche utilizzare il monitor dell'oggetto di comunicazione tra diversi thread.
Class
oggetto corrispondente per i metodi statici. Se hai già un method1 () sincronizzato e dichiari method2 () sincronizzato, non vengono creati nuovi monitor e infatti invocando uno dei due metodi (sullo stesso oggetto) tenterai di bloccare lo stesso monitor. Questo spesso attira i nuovi arrivati.
Un monitor è un'entità che possiede sia un blocco che un set di attesa . In Java, qualsiasiObject
può fungere da monitor.
Per una spiegazione dettagliata di come funzionano i monitor in Java, ti consiglio di leggere la sezione Meccanica dei monitor di Programmazione concorrente in Java (il link precedente mostra l'anteprima nei libri di Google e quella sezione è disponibile per la lettura).
Wakes up all threads that are waiting on this object's monitor.
di notificationall (), quello che ottengo è l'oggetto sta mantenendo (con l'aiuto dell'entità / oggetto interno) ciò che tutti i thread sono in attesa di blocco, quell'entità / oggetto interno si chiama monitor?
Il linguaggio Java e il sistema di runtime supportano la sincronizzazione dei thread mediante l'uso di monitor.
Un monitor è associato a un elemento di dati specifico (una variabile di condizione) e funge da blocco su tali dati. Quando un thread contiene il monitor per alcuni elementi di dati, altri thread vengono bloccati e non possono ispezionare o modificare i dati.
http://java.sun.com/docs/books/jvms/second_edition/html/Concepts.doc.html#33308
Un meccanismo per controllare l'accesso agli oggetti uno alla volta
Monitor è un costrutto di sincronizzazione che consente ai thread di avere sia l'esclusione reciproca sia la capacità di attendere (bloccare) che una determinata condizione diventi realtà.
I monitor hanno anche un meccanismo per segnalare ad altri thread che le loro condizioni sono state soddisfatte. È un'entità che possiede sia un blocco che un set di attesa. In Java, qualsiasi oggetto può fungere da monitor.
Nella macchina virtuale Java, ogni oggetto e classe è logicamente associato a un monitor. Per implementare la capacità di esclusione reciproca dei monitor, un blocco (a volte chiamato mutex) è associato a ciascun oggetto e classe. Questo è chiamato semaforo in termini di sistemi operativi, mutex è un semaforo binario.
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html
il monitor è associato all'oggetto o al membro dati, che viene acquisito quando un membro o un oggetto dati viene inserito è un blocco di sincronizzazione (sezione critica) e rilascia quando viene chiuso.