Che cos'è un monitor a cui si fa riferimento nella programmazione concorrente in Java?Che cos'è un monitor in Java?
Quando ho letto che "ogni oggetto ha associato un monitor" cosa significa?
È un oggetto speciale?
Che cos'è un monitor a cui si fa riferimento nella programmazione concorrente in Java?Che cos'è un monitor in Java?
Quando ho letto che "ogni oggetto ha associato un monitor" cosa significa?
È un oggetto speciale?
Un monitor è un meccanismo per controllare l'accesso concorrente a un oggetto.
Ciò permette di fare:
filettatura 1:
public void a()
{
synchronized(someObject) {
// do something (1)
}
}
filettatura 2:
public void b()
{
synchronized(someObject) {
// do something else (2)
}
}
Questo impedisce Fili 1 e 2 di accesso sezione monitorata (sincronizzato) Allo stesso tempo. Uno inizierà e il monitor impedirà all'altro di accedere alla regione prima che il primo termini.
Non è un oggetto speciale. È il meccanismo di sincronizzazione collocato nella radice della gerarchia di classi: java.lang.Object
.
Esistono anche i metodi wait
e notify
che utilizzeranno anche il monitor dell'oggetto per la comunicazione tra diversi thread.
così possiamo dire che quando creiamo un metodo sincronizzato stiamo definendo una serratura (monitor) sul metodo di quell'oggetto? – xdevel2000
Esattamente. Quando si usa un metodo sincronizzato (che non ho inserito nella mia risposta) si sta creando un monitor su quel metodo. –
Erm, non esattamente. Ogni oggetto ha automaticamente un monitor (mutex) ad esso associato, indipendentemente da qualsiasi altra cosa. Quando dichiari un metodo sincronizzato, dichiari che il runtime deve ottenere il blocco sul monitor dell'oggetto prima che inizi l'esecuzione di quel metodo (e deve rilasciare il blocco prima che il controllo ritorni al codice chiamante). –
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
Un monitor è un'entità che possiede sia un serratura e wait set. In Java, qualsiasi Object
può fungere da monitor.
Per una spiegazione dettagliata di come funzionano i monitor in Java, vi consiglio di leggere le Monitor Meccanica sezione del Concurrent Programming in Java (il link precedente visualizza l'anteprima in Google books, e che la sezione è disponibile per la lettura).
Come hai detto "Un monitor è un'entità ..", significa che il monitoraggio è un oggetto/stato interno che possiede/traccia il blocco e il waitset? Se no, per favore, puoi elaborare Entity qui? Fondamentalmente quando java doc dice "Riattiva tutti i thread che stanno aspettando sul monitor di questo oggetto". A proposito di notifyall(), quello che ottengo è che l'oggetto sta mantenendo (con l'aiuto di entità/oggetto interno) che tutti i thread stanno aspettando il blocco, quell'entità/oggetto interno è chiamato monitor? – user3198603
Il linguaggio Java e il sistema di runtime supportano la sincronizzazione dei thread tramite l'uso di monitor.
Un monitor è associato a un elemento di dati specifico (una variabile di condizione) e funziona come un blocco su tali dati. Quando un thread contiene il monitor per alcuni dati, gli altri thread sono bloccati e non possono ispezionare o modificare i dati.
http://journals.ecs.soton.ac.uk/java/tutorial/java/threads/monitors.html
monitor è associato con oggetti o dati utente, che è quando un membro acquisire dati o di un oggetto è inserire blocco di sincronizzazione (sezione critica) e rilasciare quando è uscita.
+1 Questo mi ha fatto leggere come i monitor sono implementati a livello di JVM. Imparato qualcosa di nuovo i dettagli – naikus
@naikus mi aspetto che condividono formano voi :) – roottraveller