쓰레드의 동기화Backend/java2018. 8. 16. 04:16
Table of Contents
반응형
쓰레드의 동기화 – 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에서 대기중인 모든 쓰레드를 깨운다.
반응형
'Backend > java' 카테고리의 다른 글
java windowbuilder설치방법 (0) | 2018.08.24 |
---|---|
windows 10 에서 java 환경변수 설정하기 (0) | 2018.08.22 |
쓰레드의 상태 ( state of thread ) (0) | 2018.08.16 |
데몬 쓰레드 ( daemon thread ) (0) | 2018.08.16 |
쓰레드 그룹 ( ThreadGroup ) (0) | 2018.08.16 |
@IT grow. :: IT grow.
#IT #먹방 #전자기기 #일상
#개발 #일상