엄마와 아들이 ATM을 통하여 1000원씩 꺼내갈려고 한다.

한 쪽만 독점하지 않고 서로 돌아가면서 뽑을려면 스레드를 잘 써야한다.

 

 

동기화(Synchronized)

: 보내고 받는 영역이 서로 okay 되면 전송하고 받음
   임계 영역을 지정하기 위해 동기화 메소드와 동기화 블록 제공 -> 스레드 내부에 동기화 존재 시 객체 잠금 걸어 다른 스레드가 임계 영역 코드를 실행하지 못함
   synchronized -> 인스턴스, 정적 메소드 어디든 가능

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
class ATM implements Runnable {
    
     private long depositeMoney = 10000;
 
     public void run() {
         synchronized (this) {                            //동기화 사용하기 위해
               for (int i = 0; i < 10; i++) {
                   
                   try {
                       notify();                        //실행 대기 상태로
                       Thread.sleep(1000);
                    } catch (InterruptedException e) {e.printStackTrace(); }
                   
                   if (getDepositeMoney() <= 0)         //여기서 wait()으로 잠들기 전에 금액 -되면 break로 나갈 수 있도록
                        break;
                   
                    try {
                        wait();                            //if에서 안걸리면 wait(), 걸리면 나갈 수 있도록 
                    } catch (InterruptedException e1) {e1.printStackTrace();}    
                    //일시 정지 상태로
                    
                    
                    withDraw(1000);
               }
         }
     }
    
     public void withDraw(long howMuch) {
          if (getDepositeMoney() > 0) {
               depositeMoney -= howMuch;
               System.out.print(Thread.currentThread().getName() + " , ");
               System.out.print("잔액 : "+ getDepositeMoney()+"\n");
          } else {
               System.out.print(Thread.currentThread().getName() + " , ");
               System.out.println("잔액이 부족합니다.");
          }
          
     }
    
     public long getDepositeMoney() {
         return depositeMoney;
     }
     
    }
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4f; text-decoration:none">Colored by Color Scripter
 

'JAVA' 카테고리의 다른 글

제네릭 예제  (0) 2019.06.20
제네릭  (0) 2019.06.20
멀티 스레드 예제_priority  (0) 2019.06.20
멀티 스레드 예제_yield  (0) 2019.06.20
멀티 스레드 예제_join()  (0) 2019.06.19

+ Recent posts