728x90
멀티 쓰레드 프로세스는 다른 쓰레드의 작업에 영향을 미칠 수 있습니다.
진행 중인 작업이 다른 쓰레드에게 간섭받지 않게 하려면 동기화 작업이 필요합니다.
동기화는 한 쓰레드가 진행중인 작업을 다른 쓰레드가 간섭하지 못하도록 막는 것을 의미합니다.
동시에 접근하고 공유되는 자원에서 문제가 발생하지 않도록 보장해줘야 하는 임계영역은 락(Lock) 을 얻은 단 하나의 쓰레드만 출입이 가능합니다.
락은 객체마다 1개씩 가지고 있습니다.
임계영역을 보장해주기 위한 방법은 뮤텍스와 세마포어가 있습니다.
https://josteady.tistory.com/557
동기화를 해주는 방법은 아래와 같습니다.
한 쓰레드의 작업이 다른 쓰레드에 의해서 영향을 받는 일이 발생하면 안되는 계좌 같은 서비스에서는 사용해야 합니다.
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 |
댓글