본문 바로가기
Language/JAVA

쓰레드 동기화(Synchronization)

by YoonJong 2023. 2. 13.
728x90

멀티 쓰레드 프로세스는 다른 쓰레드의 작업에 영향을 미칠 수 있습니다.

진행 중인 작업이 다른 쓰레드에게 간섭받지 않게 하려면 동기화 작업이 필요합니다.

 

동기화는 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는 것을 의미합니다.

동시에 접근하고 공유되는 자원에서 문제가 발생하지 않도록 보장해줘야 하는 임계영역은 락(Lock) 을 얻은 단 하나의 쓰레드만 출입이 가능합니다.

락은 객체마다 1개씩 가지고 있습니다.

 

임계영역을 보장해주기 위한 방법은 뮤텍스와 세마포어가 있습니다.

https://josteady.tistory.com/557

 

[CS] 뮤텍스(Mutex) 세마포어(Semaphore) 란?

먼저 임계영역은 무엇인가? 임계영역(Critical Section) 이란? 동시접근, 공유되는 자원에서 문제가 발생하지 않도록 독점을 보장해줘야하는 영역을 뜻한다. 뮤텍스와 세마포어는 동시성 프로그램의

josteady.tistory.com

 

동기화를 해주는 방법은 아래와 같습니다.

한 쓰레드의 작업이 다른 쓰레드에 의해서 영향을 받는 일이 발생하면 안되는 계좌 같은 서비스에서는 사용해야 합니다.

public synchronized void withdraw(int money) {
    if ( balance >= money ) {
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {}
        balance -= money;
    }
}


synchronized 가 붙어있는 영역은 임계영역으로 설정됩니다.

해당 영역은 하나의 쓰레드만 작동되며 다른 쓰레드는 간섭할 수 없습니다.

728x90

'Language > JAVA' 카테고리의 다른 글

스트림(Stream) 의 특징  (0) 2023.02.13
람다식과 함수형 인터페이스  (0) 2023.02.13
Thread.sleep() 과 interrupted()  (0) 2023.02.12
쓰레드(Thread) 는 무엇일까?  (0) 2023.02.12
열거형(Enum) 을 알아보자  (0) 2023.02.12

댓글