Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    9

    [JAVA] Synchronized metodi di classe e metodi di istanza

    Ciao a tutti.
    Scrivendo del codice per un programma che utilizza RMI mi è sorto un dubbio riguardo ai metodi synchronized.
    La mia domanda è molto semplice:
    Se mi trovo ad avere due metodi synchronized, uno di classe (static) e uno di istanza, questi possono essere eseguiti contemporaneamente (da più thread) oppure il primo ad essere eseguito, che quindi ottiene il lock, blocca l'altro fino al suo completamento?
    Es.
    codice:
    public synchronized void m1(){
       ;
    }
    private static synchronized void m2(){
       ;
    }
    Spero di essermi spiegato in maniera chiara.
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da Trevo92 Visualizza il messaggio
    Se mi trovo ad avere due metodi synchronized, uno di classe (static) e uno di istanza, questi possono essere eseguiti contemporaneamente (da più thread) oppure il primo ad essere eseguito, che quindi ottiene il lock, blocca l'altro fino al suo completamento?
    m1 sincronizza sull'oggetto su cui è invocato m1. Quindi thread differenti che invocano m1 su istanze differenti non si bloccano a vicenda, ovvero non c'è mutua esclusione.

    m2 sincronizza sulla istanza di java.lang.Class di quella classe (dove c'è m2). Pertanto è una mutua esclusione "globale".

    Ed essendo oggetti di lock comunque differenti non c'è mai mutua esclusione tra m1 e m2. Ovvero thread A può invocare m1 e contemporaneamente thread B può invocare m2.

    E per finire: hai solo abbozzato il codice, quindi non si capisce cosa fanno quei metodi. Se m1 invocasse m2, allora il "collo di bottiglia" diventa proprio m2.
    Ultima modifica di andbin; 23-10-2013 a 17:45
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2011
    Messaggi
    9
    Ti ringrazio. Ho abbozzato il codice in quella maniera proprio perché si tratta di due metodi separati, nessuno dei due richiama l'altro.
    Mi interessava proprio quello che mi hai spiegato, ovvero che non c'è mutua esclusione tra m1 e m2.
    Grazie mille.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da JavaForEver112 Visualizza il messaggio
    ciao,diseguitounesempiodicomesiusasyncronized:
    .......
    Caro JavaForEver112 (o IlJavarolo), non riportare "su" discussioni di 3+ anni fa solo per farti "pubblicità". Se vuoi dimostrare la tua conoscenza di Java, rispondi alle questioni come faccio io da anni.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Caro JavaForEver112 (o IlJavarolo), non riportare "su" discussioni di 3+ anni fa solo per farti "pubblicità". Se vuoi dimostrare la tua conoscenza di Java, rispondi alle questioni come faccio io da anni.
    Sottoscrivo e chiudo la discussione.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.