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

java synchronized 로드 락-스레드가 재입력 가능한 설명 및 예제 코드

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와 같은 락 메커니즘은 스레드가 재입력 가능합니다.

읽어주셔서 감사합니다. 많은 도움이 되길 바랍니다. 많은 분들의 사이트 지원에 감사합니다!

추천해드립니다