>

완료하는 데 5 초가 걸리는 클래스에 정적 블록이 있다고 가정 해 봅시다. 이 5 초가 경과하기 전에 동일한 클래스의 새 인스턴스화가 실행됩니다. 이 경우 어떻게됩니까? 첫 번째 인스턴스화가 완료 될 때까지 두 번째 인스턴스화가 지연됩니까? 이 경우 정적 블록은 인스턴스화의 '동기화 기'역할을합니까? 두 인스턴스화가 동시에 실행됩니까?

P.D. Pls는 느린 정적 블록이 나쁜지에 대한 논의를 시작하지 마십시오.

  • 답변 # 1

    https://docs.oracle.com/javase/specs/jls/se9/html/jls-12.html#jls-12.4.2에 따르면

    2 단계 참조 :

    와이즈 비즈

    6 단계 :

    와이즈 비즈

    마지막으로 9 단계 :

    와이즈 비즈 보시다시피, 여러 스레드가 한 번에 클래스를 초기화해야하는 경우 그 중 하나만 통과합니다. 다른 사람들은 성공적인 사람이 일을 마칠 때까지 기다립니다. 따라서 5 초 정적 이니셜 라이저가 실행되고 다른 스레드는 인스턴스가 생성되기 전에 완료 될 때까지 기다립니다.

    If the Class object for C indicates that initialization is in progress for C by some other thread, then release LC and block the current thread until informed that the in-progress initialization has completed, at which time repeat this step.

  • 이전 android - MI BAND 2를 사용하는 Bluetooth 저에너지
  • 다음 node.js - Vuejs에 대한 서버 전송 이벤트를 어떻게 설정해야합니까?