2013-07-25 2 views
0

안녕하세요.시간 확인이 가능합니다. 내부 스레드 상태

아래에 표시된 스레드가 있습니다. 그 동안 참된 조건에서 HashSet 내부의 데이터를 지속적으로 확인합니다. 존재하는 경우 HashSet에서 5 분 동안 심볼이없는 경우 (여기에 질문은 어떻게하면 그 아래에 다른 조건을 유지할 수 있습니까?)

package com; 

import java.util.HashSet; 

public class Tester extends Thread 

{ 

    HashSet<String> set = new HashSet<String>(); 

    public void run() { 

     while (true) { 

      try { 

       if (set.size() > 0) { 

        // extract those and do something 
        set.clear(); 
       } 

       else { 

        // if there were no elements in set for more than 5 minutes than execute a task 
        // here is my question , to keep such a check is possible or not 


       } 

       Thread.sleep(2000); 
      } catch (Exception e) { 

      } 

     } 
    } 

    public static void main(String args[]) { 
     try { 
      Tester qT = new Tester(); 
      qT.start(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 

답변

1

루프 전에 타임 스탬프를 초기화 할 수 있습니다. 그런 다음 set.size() > 0이 true 인 경우 타임 스탬프를 현재 시간으로 업데이트합니다. 그렇지 않으면 저장된 시간 소인이 현재 시간 소인보다 적어도 5 분 더 오래되었는지 여부를 점검합니다.

당신은 아마 이런 식으로 뭔가를 원하는 :

package com; 

import java.util.HashSet; 
import java.util.Date; 

public class Tester extends Thread 
{ 
    HashSet<String> set = new HashSet<String>(); 

    public void run() { 
     Date d = new Date(); 
     while (true) { 
      try { 
       if (set.size() > 0) { 
        d = new Date(); 
        set.clear(); 
       } 
       else { 
        if(new Date().getTime() - d.getTime() > 300000){ 
         d = new Date(); 
         //execute your method 
        } 
       } 

       Thread.sleep(2000); 
      } catch (Exception e) { 
      } 
     } 
    } 

    public static void main(String args[]) { 
     try { 
      Tester qT = new Tester(); 
      qT.start(); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

} 
+0

당신의 아이디어가 좋아 보인다,하지만 난이 – Kiran

+0

@Kiran를 컴파일 할 수없는 나는, 내가 코드를 고정. 이제는 나를 위해 컴파일됩니다. –

+0

고마워, 내가 한 가지 질문을 가지고있는 동안 진정한 루프 조건 내가 d = new Date(); , 너무 많은 개체의 문제가되지 않을까요 ?? – Kiran

0

첫째, 타이머 만들 :

timer.start(); 

가있는 경우 : 스레드가 시작되면 타이머를 시작하면

Timer timer = new Timer(300000, new ActionListener() { 
    public void actionPerformed(ActionEvent event) { 
     <preform the task here> 
    } 
}); 
timer.setRepeats(false); 

을 세트의 상품 :

timer.restart(); 

else가 필요하지 않으므로 타이머가 처리합니다. 기본 루프 상태에서 timer.isRunning을 확인하여 5 분 후에 설정된 요소에 대한 검사가 중지되도록해야합니다.

1

스레드가 실행되면 SystemTime을 가져옵니다. 또한 다음과 같이 else 블록에서 현재 시간을 얻습니다. 또한 해시 세트에서 데이터를 가져 오는 경우 새로운 시스템 시간 t1을 계산하십시오 package com;

import java.util.HashSet; 

public class Tester extends Thread 

{ 

HashSet<String> set = new HashSet<String>(); 

public void run() { 
    long t1 = date.getTime(); 
    while (true) { 

     try { 

      if (set.size() > 0) { 

       // extract those and do something 
       set.clear(); 
      } 

      else { 

       // if there were no elements in set for more than 5 minutes than  execute a task 
       // here is my question , to keep such a check is possible or not 

long t1 = date.getTime(); 
if(!hashset_data_not_available) 
{ 
t1 = date.getTime(); 
} 
if((t2-t1)/(60*1000)>5 && if_hashset_data_not_available) { 
//do something that u wanna do 
{ 
      } 

      Thread.sleep(2000); 
     } catch (Exception e) { 
+0

질문에 사용 된 것과 동일한 조건을 사용하지 않은 이유는 무엇입니까? –