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 메서드에 진입할 수 있을까요?63;
rgl 스레드가 get 메서드를 먼저 호출하여 ReGetLock 객체의 락을 가져왔으므로, rgl 스레드가 synchronized 키워드가 표시된 set 메서드에 진입하려고 할 때, 락을 잡지 못하고 무한히 기다릴까요?63;
그렇지 않습니다,JAVA에서는,어떤 스레드가 이미 자신이 가진 락을 가져오려고 시도하면, 이 요청은 성공합니다. 그렇지 않으면 락을 잡지 못하고 무한히 기다릴 수 있습니다.
따라서 synchronized와 같은 락 메커니즘은 스레드가 재입력 가능합니다.
읽어주셔서 감사합니다. 많은 도움이 되길 바랍니다. 많은 분들의 사이트 지원에 감사합니다!