게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
자바 쓰레드 동기화 질문있습니다.
게시물ID : programmer_5930짧은주소 복사하기
작성자 : 홍기씨
추천 : 0
조회수 : 892회
댓글수 : 6개
등록시간 : 2014/10/13 01:10:50
옵션
  • 본인삭제금지
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){}
이부분이 첫번째 실행은 순서가 상관이 없고 두번째 출금순서부터는 번갈아가면서 해야하는건데 뭔가 이상한느낌이 들어서
어떤식으로 해야 좋을지 질문드립니다.
그리고 결과가2.PNG
1.PNG
2.PNG
 
이 두개처럼 나와야하는데 가끔씩
4.PNG
4.PNG
이런식으로 나오네요. 무엇이 문제일까요... 똑같은 질문 여려개해서 죄송합니다. 이 한문제로 이틀을 밤샜더니ㅠㅠ
 

전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호