달력

12

« 2024/12 »

  • 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
2012. 7. 24. 09:40

synchronized : 동기화(Lock) Enjoy/JAVA2012. 7. 24. 09:40

출처 : http://blog.naver.com/sang_it/156495940


package com.thread;
/*
 * 동기화 : 쓰레드 Lock걸기,Synchronized를 걸면 동시 접속이 안된다 
하나의 자원(데이터)에 대해서 여러 스레드가 사용하려고 할때 
한 시점에서 하나의 스레드만 사용할 수 있도록 하는 것이다.
synchronized 식별자는 보통 메소드의 선언부에 쓰고 
이 키워드가 붙은 메소드는 한번에 하나의 스레드만 접근이 가능하며
메소드가 사용중일 때 다른 스레드가 메소드를 호출하면 앞의 스레드가 종료될때까지 기다려야 한다.
*/
class ATM implements Runnable{
 private long depositeMoney = 10000;


 @Override
 public void run() {
  synchronized (this) {
   for(int i=0; i<10 ; i++){
    try{
     Thread.sleep(100);
    }catch (Exception e) {
     e.printStackTrace();
    }
    //현재 디파짓을 반환
    if(getDepositMoney() <=0)
     break;
    whithDraw(100);
   }
  }  
 }


 private void whithDraw(int i) {
  if(0< depositeMoney)
   depositeMoney -= i;
  System.out.println(Thread.currentThread().getName()+ ","+depositeMoney);
 }


 private long getDepositMoney() {
  return depositeMoney;
 }

}

public class SynchronizedTest {
 public static void main(String[] args) { 
  ATM atm = new ATM();
  Thread t1 = new Thread(atm,"First");
  t1.start();
  
  Thread t2 = new Thread(atm,"Second");
  t2.start(); 


 }

}
==========결과 ====================

First,9900
First,9800
First,9700
First,9600
First,9500
First,9400
First,9300
First,9200
First,9100
First,9000
Second,8900
Second,8800
Second,8700
Second,8600
Second,8500
Second,8400
Second,8300
Second,8200
Second,8100
Second,8000

 

 

 

 

****첫번째로 들어온 쓰레드가 끝나면 다음 쓰레드 실행

:
Posted by 라면스프