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 |