티스토리 뷰
class Account {
int balance = 1000;
public void withdraw(int money) {
if (balance >= money) {
try {
Thread.sleep(1000);
} catch (Exception e) {
}
balance -= money;
}
}
}
class Bank extends Thread {
static Account ac = new Account();
public Bank() {
};
public Bank(String name) {
super(name);
};
public void run() {
while (true) {
//동기화를 하면 먼저 임계구역에 접근한 스레드가 구역을 점령한다.
synchronized (ac) {
int money = (int) (Math.random() * 3 + 1) * 100;
if (ac.balance >= money) {
System.out.println(getName() + ": 원본의 balance : "
+ ac.balance);
System.out.println(getName() + ": 찾는 금액 : " + money);
ac.withdraw(money);
System.out.println(getName() + ": 수정된 balance : "
+ ac.balance);
System.out.println();
} else {
System.out.println("잔액부족");
break;
}
}
}
}
}
public class MainThread {
public static void main(String[] args) {
// TODO Auto-generated method stub
Bank b1 = new Bank("ATM");
Bank b2 = new Bank("Bank");
//동기화하기전에는 순서없이 실행이 되어서
//결과 값에 문제가 있었지만
//동기화를 하게되면 먼저 실행된 스레드가 먼저 작업을 하게 되는 대신
//올바른 결과 값을 보장 받는다.
b1.start();
b2.start();
}
}
'java,web study > 3주차 (7월 15일 ~21일)' 카테고리의 다른 글
데몬 스레드 (0) | 2013.07.17 |
---|---|
스레드 예제 (성금 모금) (0) | 2013.07.17 |
JTable 02 (0) | 2013.07.17 |
JTable (0) | 2013.07.17 |
Box Layout (0) | 2013.07.17 |