김영한의 실전 자바 - 고급 1편(volatile, synchronized, LockSupport, ReentrantLock)
·
김영한의 실전 자바 - 고급 1편
메모리 가시성main 스레드에서 생성한 myThread의 runFlag의 값을 mainThread에서 true에서 false로 바꿀 경우 이 값이 work 스레드에 바로 반영이 되지 않는 이유를 설명하시오각 스레드는 메인 메모리에 있는 값을 자신의 코어의 캐시 메모리에 가져와서 사용하는 방식임.이때, 값 변경이 일어나는 경우 메인 메모리에 값을 변경하는 것이 아닌 자신의 캐시 메모리에만 값을 변경함.따라서, runFlag의 값이 main thread에서 false로 바뀌더라도 이는 메인 메모리에 적용되지 않고 work thread도 이 사실을 알 수 없음.이 값은 언제 바뀔지 알 수 없으며 환경에 따라서 결과는 달라지게 됨.sleep과 같이 스레드가 쉬거나 콘텍스트 스위칭이 되면서 주로 갱신됨.   vo..
김영한의 실전 자바 - 고급 1편(스레드 생명주기, join, interrupt, yield)
·
김영한의 실전 자바 - 고급 1편
3. 스레드 제어와 생명 주기1각 상태에 대해서 설명하시오 New (새로운 상태): 스레드가 생성되었으나 아직 시작되지 않은 상태.Runnable (실행 가능 상태): 스레드가 실행 중이거나 실행될 준비가 된 상태.일시 중지 상태들(Suspended States) Blocked (차단 상태): 스레드가 동기화 락을 기다리는 상태.Waiting (대기 상태): 스레드가 무기한으로 다른 스레드의 작업을 기다리는 상태.Timed Waiting (시간 제한 대기 상태): 스레드가 일정 시간 동안 다른 스레드의 작업을 기다리는 상태.Terminated (종료 상태): 스레드의 실행이 완료된 상태. Runnable 인터페이스의 run() 메서드를 구현할 때 InterruptedException 체크 예외를 밖으로 ..