Java volatile

2020-03-06
  • java
  • 매번 볼떄마다 새로워서 정리한다.

    java 의 volatile 은 언제 써야할까?

    thread 에서 어떤 변수 값을 읽거나 쓸때, main-memory 에서 읽거나 쓰는 것을 보장해야할 때 사용한다. 값을 읽거나 쓸때, 아무런 처리를 하지 않으면 cpu cache 에만 반영을 하고, main-memory 에는 적용이 안될 수 가 있다.

    하나의 thead 에서만 값을 수정하는 경우에 사용하면 된다. 다른 thread 들이 언제 읽어도 항상 최신 값을 보장 받을 수 있다.

    하지만 여러 thread 에서 값을 변경하는 경우는 읽고 쓰는 일종의 트랜잭션을 보장해야 하는데, 이때는 synchronized 등으로 critical section 을 보호해야 한다.

    • 임계구역(critical section) : 공유자원을 접근하는 코드부분
    • 세마포어(Semaphore) : 공유된 자원의 데이터를 여러 프로세스가 접근하는 것을 막는 것
    • 뮤텍스(Mutex) : 공유된 자원의 데이터를 여러 쓰레드가 접근하는 것을 막는 것