https://youtu.be/g4vP5wuAoPI?list=PLW2UjW795-f6xWA2_MUhEVgPauhGl3xIp
📖본 포스팅은 '자바의 정석 - 남궁성 저자' 님의 책과 유튜브 강의를 보고 작성되었습니다.
[쓰레드의 동기화]
- 멀티 쓰레드 프로세스에서는 다른 쓰레드의 작업에 영향을 미칠 수 있다.
- 진행중인 작업이 다른 쓰레드에게 간섭받지 않게 하려면 '동기화'가 필요하다.
- 동기화하려면 간섭 받지 않아야 하는 문장들을 '임계 영역'으로 설정한다.
- 임계 영역은 락(lock)을 얻은 단 하나의 쓰레드만 출입이 가능하다. (객체 1개에 락 1개)
쓰레드의 동기화 - 한 쓰레드가 진행죽인 작업을 다른 쓰레드가 간섭하지 못하게 막는 것을 의미한다.
[synchronized를 이용한 동기화]
- synchronized로 임계영역(lock이 걸리는 영역)을 설정하는 방법 2가지
- 임계 영역이 많을 수록 성능이 떨어지기 때문에 최소 영역으로 임계 영역을 지정해야 한다.
package javajungsuk;
public class Java13_12 {
public static void main(String[] args) {
Runnable r = new RunnableEx12();
new Thread(r).start();
new Thread(r).start();
}
}
class Account {
private int balance = 1000;
public int getBalance() {
return balance;
}
public synchronized void withdraw(int money) {
if (balance >= money) {
try {Thread.sleep(1000);} catch (InterruptedException e) {}
balance -= money;
}
}
}
class RunnableEx12 implements Runnable{
Account acc = new Account();
@Override
public void run() {
while(acc.getBalance()>0) {
int money = (int)(Math.random()* 3 + 1) * 100;
acc.withdraw(money);
System.out.println("balance: "+acc.getBalance());
}
};
}
- 쓰레드 동기화를 사용해서 통장 잔고가 음수가 나오지 않게끔 하는 코드
'Java > 객체지향' 카테고리의 다른 글
[객체지향][람다식/Lambda Expression] - 람다식 (0) | 2022.03.05 |
---|---|
[객체지향][쓰레드/thread] - 쓰레드 동기화의 단점을 보완하기 위한 wait()와 notify() (0) | 2022.03.04 |
[객체지향][쓰레드/thread] - join(), yield() (0) | 2022.03.03 |
[객체지향][쓰레드/thread] - suspend(), resume(), stop() (0) | 2022.03.02 |
[객체지향][쓰레드/thread] - sleep(), interrupt() (0) | 2022.03.02 |