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

Подробное объяснение synchronized загрузки и блокировки в java - пример кода с повторным входом в строку

java synchronized загрузка блокировки-потоки могут быть повторно входящими

Пример кода:

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();
  }
}

Может ли поток, выполняющий код, войти в метод set?

Потому что поток rgl сначала вызвал метод get, получил锁 объекта ReGetLock, так что когда поток rgl хочет войти в метод, помеченный ключевым словом synchronized, он будет заблокирован и продолжать ждать?

На самом деле, нет, в JAVAКогда某个线程试图获得一个它自己已经持有的锁,那么这个请求会成功。否则会出现死锁。

Таким образом, как mechanism of locking synchronized, потоки могут быть повторно входящими.

Спасибо за чтение, надеюсь, это поможет вам, спасибо за поддержку нашего сайта!

Основной учебник
Рекомендуем к просмотру