최근에 인터뷰 대상자에게 Java 동시성을 알고 있다고 말하는 몇 가지 질문이 있습니다.
- "메모리 가시성"의 위험성을 설명하십시오. JVM이 모니터에 의해 보호되지 않고 선언되지 않은 변수에 대한 특정 작업의 순서를 재정렬
volatile하여 하나의 스레드가 다른 스레드의 변경 사항을 볼 수 없도록하는 방법을 설명합니다. 일반적으로 나는이 위험이 존재하는 코드 (예 :NoVisibilityGoetz 등의 "Java Concurrency in Practice"의 목록 3.1에 있는 예제)를 보여주고 무엇이 잘못된지를 묻는 것으로이 질문을한다. volatile선언 된 실제 변수volatile뿐만 아니라 변수가 변경되기 전에 스레드에 의해 작성된 변수의 변경에도 어떤 영향을 미치는지 설명volatile하십시오.- 왜
volatile대신에 사용할 수synchronized있습니까? wait()및 로 조건 변수를 구현하십시오notifyAll(). 왜 사용해야하는지 설명하십시오notifyAll(). 조건 변수를while루프 로 테스트해야하는 이유를 설명하십시오 .
내 질문은-Java 동시성을 알고 있다고 말하는 사람에게 물어보기에 적절하거나 너무 고급입니까?
그리고 우리가 그것을하고있는 동안, Java 동시성에서 일하는 누군가가 Java 가비지 수집에 대한 평균 이상의 지식을 가지고 있어야한다고 생각하십니까?
notifyAll()"OS 스케줄러의 작업을 믿지 않기 때문에 notify()"