- JMM은 특정 스레드에서 메모리를 대상으로 취하는 작업이 다른 스레드에게 어떻게 보이는지의 여부를 명시하고 있다.
- 가시성을 보장해주는 연산은 미리 발생이라는 규칙을 통해 부분적으로 실행 순서가 정렬된 상태를 유지하며, 미리 발생 규칙은 개별적인 메모리 작업이나 동기화 작업의 수준에서 정의하는 규칙이다.
- 충분히 동기화되지 않은 상태에서는 공유된 데이터를 여러 스레드에서 사용할때는 굉장히 이상한 현상이 발생할 수 있다.
@GuardedBy
나 안전한 공개 등 고수준의 방법을 적용하면 미리 발생 규칙과 같은 저수준의 세밀한 부분까지 신경쓰지 않는다 해도 스레드 안전성을 보장할 수 있다.
그냥 immutable object를 쓰는게 가장 좋은 것 같다.