2013-07-12 3 views
0

회의 참석자에게 메시지를 브로드 캐스트하는 회의 브로드 캐스트 응용 프로그램을 만들고 있습니다. 5 분 후에 실행되는 모임 데이터 검사기 스레드가 있습니다. 이 코드 사용하여이 작업을 수행 한 다음 DataAccessScedule에 쿼리 15 분 후에 시작 될 것으로 예상되는 회의의 데이터를 얻을 이제주어진 시간에 실행되는 스레드를 구성하는 방법

ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1); 
scheduledExecutorService.scheduleWithFixedDelay(new DataAccessSchedule(), 0, 5,TimeUnit.MINUTES); 

을, 그래서 나는 15 분 전에 데이터와 테이블의 시간을 얻을 01:45, ... 01:50, ... 01:52, ..

그래서 현재 시간과의 차이를 취하여 밀리 초 단위로 시간을 계산했습니다. 이제 밀리 즈 시간은 x입니다. , y 및 z. x, y, z 시간에 스레드를 실행하고 이러한 스레드가 실행 후 자체를 파괴합니다. 위와 같이 실행 프로그램을 사용하여 스케줄러를 실행하고 싶지 않습니다. 어떻게해야합니까?

+0

이 코드를 사용하여 스레드를 호출합니다. ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); \t \t \t \t \t \t executorService.schedule (new MeetingBroadcaster(), InvokingTimeInSec, TimeUnit.SECONDS); 회의 횟수에 따라 1에서 n 번 실행될 수있는 루프에 있으므로 여기에 두 가지 질문이 있습니다. 1. 객체가 다시 생성되면 다시 참조 객체가 생성되므로 이전 객체 (스레드)가 삭제됩니다 새로운 객체 참조로 대체하십시오. 2. 스레드가 성공적으로 실행되면 스레드가 자체를 파괴합니까? – AsadYarKhan

+1

정확한 실행 시간을 전달할 수 없다면, 항상 계획 시간과 현재 시간의 차이를 계산 한 다음 그 차이를 분 또는 초로 전달할 수 있습니다. 이상적은 아니지만 작동 할 것입니다. Btw, ScheduledExecutorService에 대한 API 설명서가 있습니까? 모든 사용자가 여기에서 사용하는 API에 익숙하지 않으므로 질문에 이러한 세부 사항을 언급해야합니다. – ADTC

+0

여기에 http://docs.oracle.com/javase/1.5.0/docs/api/java/util/concurrent/ScheduledExecutorService.html – AsadYarKhan

답변

0

예를 들어 Quartz Scheduler과 같이 cron 표현식을 지원하는 스케줄러 라이브러리가 필요하므로 작업 시작시기를 정확하게 지정하십시오.

제한된 횟수만큼 작업을 실행하도록 구성 할 수도 있습니다.

sheduler 라이브러리를 작성하는 대신 비슷한 기능을 직접 작성하는 것이 좋습니다. 시작 조건이 현재 날짜와 일치하는 경우 (예 : 1 분, 1 초가 될 수 있음) 데이터 구조의 모든 항목을 검사하여 하나의 작업을 주기적으로 실행해야합니다 (예 : 날짜를 일치시키는 등)./시간 대 크론 표현). 그러나 기존의 라이브러리가 제공하지 않는 몇 가지 추가 기능을 원하지 않는다면 휠을 재발 명할 수 있습니다.

+0

나는 석영을 사용하고 싶지 않다. – AsadYarKhan

+0

왜?당신은 모든 것을 직접 쓰고 싶습니까? –

+0

ScheduledExecutorService를 사용하여이 작업을 수행하려고합니다. – AsadYarKhan

관련 문제