package com.test0614;
class Demo8 implements Runnable {
private int bank=1000;
public int getMoney(){
return bank;
}
private int drawMoney(int m){
bank -= m;
return m;
}
public void run(){
int need=600;
int m;
String msg;
try{
synchronized (this) { // 동기화 - 동시에 일을 못하게 한다.
if(getMoney()>=need){
Thread.yield(); //다른 스레드에게 양보
//t1과 t2가 동시에 들어왔는데 t1이 양보하게된다. t2도 와서 양보하여 t1이 23번줄 실행하고 t2도 23번줄을 실행하게 된다.
// synchronized(this)가 없다면 이미 조건문을 모두 통과하였기 때문에 잔액이 -가 되는 현상발생.
m=drawMoney(need);
msg="인출 성공...";
}else{
m=0;
msg="인출실패...";
}
}
System.out.println(msg+", 인출금액:"+m+", 잔고:"+getMoney());
}catch(Exception e){
}
}
}
public class Test8 {
public static void main(String[] args) {
Runnable ob=new Demo8();
Thread t1=new Thread(ob);
Thread t2=new Thread(ob);
t1.start(); // run 메소드를 부른다. 자바에 의해서 실행됨
t2.start();
}
}
'자바 DB 연동 > 쓰레드' 카테고리의 다른 글
쓰레드를 이용한 간단한 출금 (0) | 2013.06.19 |
---|---|
쓰레드 interrupt / isAlive (0) | 2013.06.19 |
데몬스레드 (0) | 2013.06.19 |
실시간으로 시간 보기 (0) | 2013.06.19 |
자바 쓰레드 (0) | 2013.06.19 |