Backend/java
쓰레드의 동기화
IT grow.
2018. 8. 16. 04:16
반응형
쓰레드의 동기화 – synchronized
1. 한 번에 하나의 쓰레드만 객체에 접근할 수 있도록 객체에 락(lock)을 걸어서 데이터의 일관성을 유지하는 것
쓰레드 동기화 예제
package Practice;public class synchronizedExample implements Runnable{Account acc = new Account();public void run(){while(acc.balance>0){int money = (int)(Math.random()*3 +1)*100; // 100,200,300acc.withdraw(money);System.out.println("balance : " + acc.balance);}}}class Account {int balance = 1000;public void withdraw(int money) {if (balance >= money) {try {Thread.sleep(1000);} catch (Exception e) {}balance -= money;}}}
결과값
2. 동기화의 효율을 높이기 위해 wait() , notify()를 사용
3. Object클래스에 정의되어 있으며 , 동기화 블록 내에서만 사용할 수 있다.
4. Wait() – 객체의 lock을 풀고 해당 객체의 쓰레드를 waiting pool에 넣는다.
5. Notify() – waiting pool에서 대기중인 쓰레드 중의 하나를 깨운다.
6. notifyAll() – waiting pool에서 대기중인 모든 쓰레드를 깨운다.
반응형