본문 바로가기

자바

동기화 synchronized

ThreadBankmain.java


package pack.thread;


public class ThreadBankMain {

public static ThreadBank myBank = new ThreadBank();


public static void main(String[] args) {

System.out.println("원금 : " + myBank.getMoney());

ThreadPark park = new ThreadPark();

ThreadParkWife wife = new ThreadParkWife();

park.start();

wife.start();

}

}

================================================================================================
ThreadPark.java

package pack.thread;

public class ThreadPark extends Thread{
@Override
public void run() {
ThreadBankMain.myBank.saveMoney(5000);
System.out.println("남편 입금 후 잔액 : " + ThreadBankMain.myBank.getMoney());
}
}
================================================================================================
ThreadParkWife.java

package pack.thread;

public class ThreadParkWife extends Thread{
@Override
public void run() {
ThreadBankMain.myBank.minusMoney(2000);
System.out.println("아내 출금 후 잔액 : " + ThreadBankMain.myBank.getMoney());
}
}
================================================================================================
ThreadBank.java

package pack.thread;

public class ThreadBank {
private int money = 10000; // 이거슨 공유 자원
public void setMoney(int money) {
this.money = money;
}
public int getMoney() {
return money;
}
//자원 동기화 - synchronized (실행되는 순간 락을 걸어서 해당 메소드가 끝날때까지 기다림)
public synchronized void saveMoney(int save){ //입금
int m = getMoney();
try {
Thread.sleep(2000); // 지연시간(2초 농땡이)
} catch (Exception e) {
}
setMoney(m + save);
}
public synchronized void minusMoney(int mon){ //출금
int m = getMoney();
try {
Thread.sleep(3000);
} catch (Exception e) {
}
setMoney(m - mon);
}
}


'자바' 카테고리의 다른 글

AWT 레이아웃의 종류  (0) 2014.02.25
AWT를 이용한 간단한 메모장 작성  (0) 2014.02.25
쓰레드로 만든 시계  (0) 2014.02.24
내부클래스  (0) 2014.02.21
인터페이스와 어댑터(추상클래스)  (0) 2014.02.21