ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Java Thread Safety 한 개발
    JAVA 2023. 8. 29. 18:23

    Thread Safe

    개발을 하다보면 Multi-Thread 환경에서 작업해야하는 경우가 있다. 이때 공유되는 자원등에 대해 Thread-safe 하게 작업하는것이 중요하다. Thread-safe 하나는것은 여러 스레드에서 클래스 혹은 객체헤 동시에 접근하여도 정확하게 동작하는것을 의미한다.

     

    Thread Safe 하게 개발하기

    Synchronized

    Java에서 가장 간단하게 Thread-Safety 하게 개발하는 방법은 synchronized keyword를 사용하는 것이다.

        public class IncreaseNumber{
            public int number;
    
            public synchronized int increase(){
                return number++;
            }
        }

    위처럼 synchronized keyword를 이용하면 increase()함수를 실행했을때 정확한 값을 받을 수 있다. 또 아래와 같이 synchronized keyword를 코드 블록에 적용할 수 있다.

    public class ThreadSafety {
        private final Object myLock = new Object();
        public int val;
    
        void sync(){
            synchronized (myLock){
                val++;
            }
        }
    }

    Java의 concurrent 패키지

    위에서 설명한 synchronized 의 가장 큰 단점은 성능을 보장하기 힘들다는 것이다. synchronized 대신 java.concurrent 패키지의 자료구조들을 이용할 수 있다면 사용하는것이 더 좋다.

     

    Stack 한정 프로그래밍

    Thread는 각자 스택이라는 공간을 할당받는다. 이 고유햔 stack 영역에 한정하여 프로그래밍을 하면 Thread-safe 하게 개발할 수 있다.

     

    ThreadLocal

    위의 stack 영역 프로그래밍은 메서드 스택을 벗어나면 변수를 참조할 수 없다. 이를 위해 ThreadLocal 이라는 클래스를 이요하는 방법이 있다. ThreadLocal을 이용하면 Thread 영역에 변수를 할당할 수 있기에 해당 Thread의 모든 코드에서 이 변수에 접근할 수 있다.

     

    참고

    https://sup2is.github.io/2021/05/03/thread-safe-in-java.html

    'JAVA' 카테고리의 다른 글

    Java Generic Compile 동작  (0) 2023.09.11
    JVM Memory Area  (0) 2023.09.08
    Java 버전 별 ArrayList add 동작  (0) 2023.09.06
    Singleton 구현 기법  (0) 2023.08.27
    Transaction 격리 레벨 / 전파 모델  (0) 2023.08.06
Designed by Tistory.