-
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