class Buffer{
private int money = 100000;
synchronized int paymoney(int pay) {
money -= pay;
return money;
}
int getmoney(){
return money;
}
}
class man extends Thread {
Buffer b;
int pay;
int t;
man(String Name, Buffer b, int money){
super(Name);
this.b = b;
this.pay = money;
}
public void run(){
while(true){
while(b.getmoney()+ 5000 == b.getmoney()|| b.getmoney() + 10000 == b.getmoney()){
try{
wait();
}catch(Exception e){}
}
if(b.getmoney() - pay < 50000){
System.out.println(getName()+ ",출금 불가 = " + pay +", 통장잔액 =" + b.getmoney());
break;
}
else{
System.out.println(getName()+ ",출금 = " + pay +", 통장잔액 =" + b.paymoney(pay));
try{
notify();
}catch(Exception e){}
}
}
}
}
public class 과제이번 {
public static void main(String[] args){
Buffer b = new Buffer();
man c1 = new man("쓰레드 1", b , 10000);
man c2 = new man("쓰레드 2", b , 5000);
System.out.println("[ 쓰레드 입/출금 시스템 ]");
c1.start();
c2.start();
try{
c1.join();
c2.join();
}catch(Exception e ){}
System.out.println("** 최종 통장 잔액 : " + b.getmoney() + " **");
}
}
자바 쓰레드 동기화 문제입니다. 제가 코드를 짜긴 했는데
while(b.getmoney()+ 5000 == b.getmoney()|| b.getmoney() + 10000 == b.getmoney()){
try{
wait();
}catch(Exception e){}
이부분이 첫번째 실행은 순서가 상관이 없고 두번째 출금순서부터는 번갈아가면서 해야하는건데 뭔가 이상한느낌이 들어서
어떤식으로 해야 좋을지 질문드립니다.
그리고 결과가
이런식으로 나오네요. 무엇이 문제일까요... 똑같은 질문 여려개해서 죄송합니다. 이 한문제로 이틀을 밤샜더니ㅠㅠ