Java에서 'synchronized' 키워드는 자바 언어의 초기 버전부터 지원되었습니다. 자바는 1995년 처음으로 발표되었고, 그때부터 'synchronized' 키워드를 사용하여 스레드 동기화를 제어하는 데 사용할 수 있었습니다. 따라서 Java 1.0부터 'synchronized' 키워드가 존재하게 됩니다.
그렇다면
'synchronized' 란 뭘까?
'synchronized' 는 Java 프로그래밍 언어에서 스레드 동기화를 구현하는데 사용되는 키워드 입니다. 스레드 동기화는 여러 스레드가 공유자원에 동시에 접근하려는 경우 발생하는 경쟁 조건과 같은 문제를 방지하고 스레드 간의 작업을 조절하기 위해 사용됩니다.
'synchronized' 키워드는 다음 두가지 주요 방법으로 사용됩니다.
메소드 레벨 동기화
메소드 선언 앞에 synchronized를 추가하여 해당 메소드를 스레드 안전하게 만듭니다. 이렇게 하면 해당 메소드를 호출하는 모든 스레드는 해당 객체에 대한 락(lock)을 획득하고 실행을 시도하게 됩니다. 다른 스레드가 해당 락을 보유하고 있을 경우 대기하게 됩니다. 이를 통해 한 번에 하나의 스레드만 해당 메소드를 실행하게 됩니다.
public synchronized void synchronizedMethod() {
// 스레드 안전한 코드
}
블록 레벨 동기화
특정 코드 블록을 'synchronized' 블록으로 감쌀 수 있습니다. 이를 통해 해당 블록 내의 코드를 실행하는 동안에만 해당 객체의 락을 보유하게 됩니다. 이 방법은 메소드 전체를 동기화하지 않고 특정 부분만 동기화할 때 유용합니다.
public void someMethod() {
// 비동기화된 코드
synchronized (lockObject) {
// 동기화된 코드
}
// 비동기화된 코드
}
synchronized를 사용하면 여러 스레드 간의 데이터 공유 및 동시 접근 문제를 해결할 수 있지만, 과도한 사용은 성능 저하를 초래할 수 있으므로 조심스럽게 사용해야 합니다. Java 5부터는 java.util.concurrent 패키지에서 더 높은 수준의 동기화 메커니즘을 제공하므로 복잡한 스레드 관리 작업을 더 효과적으로 수행할 수 있습니다.
'Programming Language > Java' 카테고리의 다른 글
[Java] 객체비교 Comparable과 Comparator (0) | 2024.05.29 |
---|---|
[Java] 변수(Variable) (0) | 2024.01.04 |
[Java] JVM (Java Virtual Machine) 자바 가상 기계 (0) | 2023.07.27 |
[Java] Garbage Collection(가비지 컬렉션)이란 (0) | 2023.04.19 |
[Java] 자바의 문자열(String) 함수 정리 (0) | 2023.03.23 |