2014-12-24 2 views
0

은 정말 다음 스레드를 시작 같은, 그것은 잠들게하고 싶지 않은 대신스레드를 시작하지만 특정 시간 동안 스레드를 유지하려면 어떻게해야합니까?

Thread.start(); 
Thread.sleep(3000); //*Example* 

, 나는이 같은이 뭔가 싶어 (그리고 나는이 아마추어 그림에 대해 사과) :

Thread.start(3000) //*thread will be given a certain amount of time to execute* 

//*After 3000 milliseconds, the thread stops and or sleeps* 

내가 특정 시간 동안 사용자 입력을하는 프로그램/미니 게임을 만들고 있기 때문에이 작업을 수행하고 있습니다. 기본적으로 사용자는 특정 문자/숫자/문자를 입력하는 데 5 초가 걸리고 그 시간이 지나면 입력 스트림이 잘립니다. 종류의 같은 :

Scanner kb = new Scanner(System.in); 
int num = kb.nextInt(); 
kb.close() //*Closes kb and input stream in turn* 
+4

사용 A [java.util.timer (http://docs.oracle.com/javase/7/docs/api/java/util/Timer.html) .. '에 스레드 시설 배경 스레드에서 향후 실행을 위해 작업을 예약하십시오. 작업을 한 번만 실행하거나 정기적으로 반복 실행하도록 예약 할 수 있습니다. " – nachokk

+1

잘못된 방식으로 생각하고 있습니다. 스레드에 의해 수행되는 작업은 부적절합니다. 귀하의 질문은 "시간이 너무 오래 걸리는 경우 작업을 어떻게 시간 초과시킬 수 있습니까?"입니다. 내부에서 스레드로 전달하여 수행해야 할 작업을 수행하지 마십시오. 먼저 수행해야 할 작업을 코딩합니다. –

답변

0

이 샘플을 사용해 볼 수 있습니다.

final List<Integer> result = new ArrayList<>(); 
    Thread thread = new Thread() { 
     volatile boolean isDone = false; 
     Timer timer = new Timer(); 

     @Override 
     public void run() { 
      timer.schedule(new TimerTask() { 
       @Override 
       public void run() { 
        isDone = true; 
       } 
      }, 5000); 

      Scanner kb = new Scanner(System.in); 
      while (!isDone) { 
       int num = 0; 
       num = kb.nextInt(); 
       result.add(num); 
      } 
      kb.close(); 
     } 

    }; 
    thread.start(); 
    thread.join(); 

    for (Integer i : result) { 
     System.out.print(i + " "); 
    } 
관련 문제