2011-09-23 17 views
8

Quando un blocco sincronizzato viene utilizzato per la sincronizzazione su un'istanza di oggetto, i thread competono per entrare nel monitor implicito dell'oggetto. E una volta, qualsiasi thread particolare entra nel monitor, qualsiasi altro thread deve attendere per entrarci. Quindisincronizzazione oggetto

synchronized(object){ 
    // some code here 
    // no function call 
} 

non deve imporre l'utilizzo di alcun tipo particolare di oggetto. Quindi qualsiasi tipo di oggetto può essere usato qui perché ogni oggetto ha il suo monitor implicito.

Gentilmente rispondimi è vero?

+6

Così educato e ben educato! –

+0

@Josh: al contrario, in realtà - l'uso del termine "programmatori rispettati" implica che alcuni di noi * non sono * (l'affermazione è vera, ovviamente). – MusiGenesis

+3

Chiunque sia abbastanza sensibile da capire che stavo salutando tutti, deve essere nuovamente accolto. Grazie Pordon Signore, per aver notato il mio rispetto per tutti. E MusiGenesis, chiunque si consideri degno di rispetto è rispettabile. Coloro che pensavano che il mio rispetto fosse destinato a loro, erano contenti e altri ............ – user961690

risposta

9

Sì, ogni oggetto Java può fungere da monitor.

e poiché questo è una risposta così breve, per bonus, questa è una lettura interessante: Does the JVM create a mutex for every object in order to implement the 'synchronized' keyword? If not, how?

Si noti inoltre che C# fa qualcosa di simile con i loro oggetti, ma avere anche i tipi di valore (che non sono i monitor)

+0

Grazie mille caro – user961690

+7

Amo il "caro"! Come mia nonna stava postando su StackOverflow ... –

+0

Cosa significa "caro"? –

5

Tieni presente che se hai una variabile che è null, non puoi bloccarla. Inoltre, mentre oggetti come Integer sono oggetti, uno int o float è non. È possibile bloccare un Integer o int[], ma non uno int.

+1

Grazie mille caro – user961690