정리

volatile

  • 업데이트 한 값은 반드시 메모리에 반영하여 다른 스레드가 참조할 때, 같은 값을 얻을 수 있게 하는 제한자

  • AtomicInteger, ConcurrentHashMap

transient

  • 직렬화 과정에서 제외하고 싶은 경우

  • 패스워드 같은 보안상 또는 불필요한 등등 다양한 이유로 데이터 직렬화하여 전송할 때, 제외하고 싶은 경

AtomicInteger

  • volatileThread1에서 쓰고, Thread2에서 읽는 경우만 동시성을 보장. 두개의 쓰레드에서 쓰기작업을 한다면 문제가 될 수 있습니다.

  • synchronized를 쓰면 안전하게 동시성을 보장하지만 비용이 가장 큼.

  • Atomic 클래스는 CAS(compare-and-swap)를 이용하여 동시성을 보장. 여러 쓰레드에서 데이터를 write해도 문제 없음

  • Integer는 동시성 보장이 안됨

ConcurrentHashMap VS HashTable

  • synchronized 는 메서드 내부에서 블록으로 처리중.

  • 동시성 제어 HashTable보다 성능이 좋음

  • volatile 필드 사용 중

Last updated