홈>
지속 시간 (50 초, 시간이 동적 일 수 있음)으로 서버에서 일부 데이터를 가져와야한다는 요구 사항이 있습니다. 동시에 10 초마다 (이 30 초 사이) 서버에 키를 보내야합니다.
아래 코드를 사용하는 iam의 경우 ...하지만 작동하지 않습니다
public static void main(String[] args) {
long startTime = System.currentTimeMillis();
long duration = (50 * 1000);
do {
// RESEt request call code goes here..
/////
//////
System.out.println("Rest request");
java.util.Timer t = new java.util.Timer();
java.util.TimerTask task = new java.util.TimerTask() {
@Override
public void run() {
//Sending key every 10 sec
RemoteKey.send(PageUp);
}
};
t.schedule(task, 0, (10 * 1000));
// This do while loop will execute 50 sec
} while ((System.currentTimeMillis() - startTime) < duration);
}
- 답변 # 1
- 답변 # 2
RxJava와 Job Scheduler를 사용하여 특정 간격으로 작업을 예약해야한다고 생각합니다.
예 :
Observable.interval(50, TimeUnit.SECONDS) .doOnNext(n -> performYourtask()) .subscribe();
- 답변 # 3
현대적인
ScheduledExecutor
를 사용한 최적의 접근 방식입니다.
페치작업이 시간 간격을 50 초로 결정하고 해당 작업이 동기식이므로 작업이 끝날 때까지 기다려야합니다.// Start the executor, scheduling your Runnable Task to run every 10 seconds executorService.scheduleAtFixedRate( () -> { // Send your data }, 0, 10, TimeUnit.SECONDS); // Fetch data from your Server. // That's a blocking operation, which, let's say will take 50 seconds // Stop the Executor as the time is over executorService.shutdown();
와이즈 비즈 팩토리 메소드를 통해 만들 수 있습니다.
Executor
Executors.newScheduledThreadPool(5); // For multiple, concurrent threads Executors.newSingleThreadScheduledExecutor(); // For a synchronous "queue"
트렌드
- OpenCv의 폴더에서 여러 이미지 읽기 (python)
- 파이썬 셀레늄 모든 "href"속성 가져 오기
- html - 자바 스크립트 - 클릭 후 변경 버튼 텍스트 변경
- git commit - 자식 - 로컬 커밋 된 파일에 대한 변경을 취소하는 방법
- JSP에 대한 클래스를 컴파일 할 수 없습니다
- javascript - 현재 URL에서 특정 div 만 새로 고침/새로 고침
- jquery - JavaScript로 현재 세션 값을 얻으시겠습니까?
- javascript - swiperjs에서 정지, 재생 버튼 추가
- JavaScript 변수를 HTML div에 '출력'하는 방법
- python - 문자열에서 특정 문자 제거
한 번 예약하지 않고 스스로 취소하는 이유는 무엇입니까?
더 현대적인 접근법은ScheduledExecutorService
를 사용하는 것입니다