English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Spiegazione dettagliata della lock java synchronized - dettagli e codice di esempio per la reentrabilità dei thread

java synchronized carica il blocco - i thread sono reentranti

Esempio di codice:

public class ReGetLock implements Runnable {
  @Override
  public void run() {
    get();
  }
  public synchronized void get() {
    System.out.println(Thread.currentThread().getId());
    set();
  }
  public synchronized void set() {
    System.out.println(Thread.currentThread().getId());
  }
  public static void main(String[] args) {
    ReGetLock rgl = new ReGetLock();
    new Thread(rgl).start();
  }
}

Può o meno il thread che esegue il codice entrare nel metodo set?

Poiché il thread rgl ha chiamato prima il metodo get, ottenendo il lock dell'oggetto ReGetLock, quindi quando il thread rgl vuole entrare nel metodo set contrassegnato con la parola chiave synchronized, verrà bloccato e aspetterà sempre?

In realtà, no, in Java,Quando un thread tenta di ottenere un lock già posseduto da sé, la richiesta avrà successo. Altrimenti si verificherà un blocco.

Infatti, in Java, come sì synchronized, il meccanismo di blocco, i thread sono reentranti.

Grazie per aver letto, spero di essere stato utile. Grazie per il supporto al nostro sito!

Ti potrebbe interessare