과제가 이런과제인데
class Buffer{
private int money = 100000;
boolean aval = false;
synchronized int payment10(int pay10){
while(aval == true){
try{
wait();
}catch(Exception e){}
}
notify();
money -= pay10;
aval = true;;
return money;
}
synchronized int payment5(int pay5){
while(aval == false){
try{
wait();
}catch(Exception e){}
}
notify();
money -= pay5;
aval = false;;
return money;
}
int getmoney() {
return money;
}
}
class customers10 extends Thread {
Buffer b;
int pay;
customers10(String Name,Buffer b,int pay){
super(Name);
this.b = b;
this.pay = pay;
}
public void run() {
for(int i= 0; i<20; i++){
System.out.println(getName()+", 출금 = "+ pay + ", 통장잔액 = " + b.payment10(pay));
if(b.getmoney()<=55000 ) {
b.aval = true;
break;
}
try {
sleep(200);
}catch(Exception e){}
}
}
}
class customers5 extends Thread {
Buffer b;
int pay;
customers5(String Name,Buffer b,int pay){
super(Name);
this.b = b;
this.pay = pay;
}
public void run() {
for(int i= 0; i<20; i++){
System.out.println(getName()+", 출금 = "+ pay + ", 통장잔액 = " + b.payment5(pay));
if(b.getmoney() <=50000 ){
break;
}
try {
sleep(200);
}catch(Exception e){}
}
}
}
public class 과제2번 {
public static void main(String[] args){
System.out.println("출금시스템");
Buffer b = new Buffer();
customers10 c1 = new customers10("쓰레드1", b, 10000);
customers5 c2 = new customers5("쓰레드2", b, 5000);
c1.start();
c2.start();
try{
c1.join();
c2.join();
}catch(Exception e){}
System.out.println("**최종 통장 잔액 = " + b.getmoney()+"**");
}
}
소스를 이정도 까지 구현했습니다. 근데
이렇게 나오는데 질문이
1. 문제의 질문처럼 마지막 다른 쓰레드의 출금이 안된다고까지 프린트하려면 어떻게 해야되나요?
출력을 하기전에 쓰레드를 break를 시켜서 그런거같기도하고 break를 걸지 않고 출력을 하면 엉뚱한 출력이 됩니다.
질문이기네요 죄송합니다. 과제를 잘 내서 점수를 잘 받는것보다는 이 문제가 어떻게 풀어지고 어떻게 구동되는지 알고싶어서 질문드립니다