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
****첫번째로 들어온 쓰레드가 끝나면 다음 쓰레드 실행
[출처] synchronized : 동기화(Lock)|작성자 sang_it