English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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, потоки могут быть повторно входящими.
Спасибо за чтение, надеюсь, это поможет вам, спасибо за поддержку нашего сайта!