2008. 12. 4. 19:02

[JAVA] thread 처리후, 결과값을 호출하는 함수에서 가져오기 (?)

public class Cust {
    // 폴링 딜레이...(millisecond)
    private static final int POLL_DELAY = 100; 

    public static boolean getCust(String id, int delay) throws TimedOutException{
        CustThread ct = new CustThread(id);
        ct.start();

        int timer = 0;
        boolean returnValue = false;
        
        while(true) {

           if (ct.isReturned()) {// getCust()의 실행이 끝났으면
               
               returnValue = ct.getReturnValue();
               break;
           } else {// 아직 끝나지 않았다면

               try {
                    // 좀 쉬어주고
                   Thread.sleep(POLL_DELAY);
               } catch(InterruptedException ie){}
               
                timer += POLL_DELAY;
   
                if (timer > dely) { // 타임 아웃되었는지 체크
                    // 주어진 시간동안 답이 없으면 Exception 발생
                    throw new Exception("TIME_OUT");
                    // return false; <-- 이렇게 하셔도
                }
            } 
         } // end of while     
         return returnValue;
     }
     

     static class CustThread extends Thread {
        
         private boolean isReturned = false;
         private String id;
         private boolean returnValue = false;


         public CustThread (String id) {
             this.id = id;
         }

         public void run() {
             /* 실제 getCust(String aaa); 를 사용
             */
             AAA a = new AAA();
             returnValue = a.getCust(id);
             // getCust() 의 실행이 끝났으면 flag 세팅
             isReturned = true;      

         }

         public boolean isReturned() {
             return isReturned;
         }

         pubilc boolean getReturnValue() {
             return returnValue;
         }
     }
}