본문 바로가기

자바 DB 연동/쓰레드

쓰레드 synchronized(동시에 일하는 것을 막는다)

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