2013-06-28 2 views
0

Java Timer Class 또는 ScheduledExecutorService interface을 참조하여 실행 프로그램 스레드 (다른 스케쥴러)의 실행 메소드 (또는 TimerTask) 내에 스케쥴러 또는 타이머를 설정할 수 있습니까?스케쥴러 (타이머)의 실행 메소드 내에서 스케쥴러 (타이머) 생성

사례 연구 : 노래 목록 (10,000)이 포함 된 데이터베이스가 있고 노래를 재생할 시간을 정합니다.

그래서 1 시간 내에 재생되도록 예약 된 모든 노래에 대해 데이터베이스를 검색하고 스케줄러를 생성하는 스케줄러 (말하기 1)를 만들려고 생각했습니다.

1 시간 후에 scheduler1이 모든 스레드를 삭제하고 데이터베이스를 다시 검색하여 다른 스레드에 대한 스케줄러를 만듭니다.

작성 하시겠습니까?

아니면 한 번에 10000 개의 스케줄러를 만들어야합니까?

이 경우 어떤 타이머 또는 스케줄러가 더 좋을까요?

답변

1

ScheduledExecutorService.scheduleAtFixedRate 또는 ScheduledExecutorService.scheduleWithFixedDelay으로 전화하지 않으시겠습니까?

UPDATE

이 원하는 (내가 믿는) 무엇을 구현하는 하나 개의 수단이다 : (? 성능 문제를)

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); 

void start(final Connection conn) 
{ 
    executor.scheduleWithFixedDelay(new Runnable(){ public void run(){ try { poll(conn); } catch (Exception e) { e.printStackTrace(); } } }, 0, 1, TimeUnit.HOURS); 
} 

private void poll(Connection conn) throws SQLException 
{ 
    final ResultSet results = conn.createStatement().executeQuery("SELECT song, playtime FROM schedule WHERE playtime > GETDATE() AND playtime < GETDATE() + 1 HOUR"); 
    while (results.next()) 
    { 
    final String song = results.getString("song"); 
    final Time time = results.getTime("playtime"); 

    executor.schedule(new Runnable(){ public void run() { play(song); } }, time.getTime() - System.currentTimeMillis(), TimeUnit.MILLISECONDS); 
    } 
} 
+0

Hii.Yeah하지만 내가 한 번에 10000 스케줄러를 만들어야합니다. 내 데이터베이스가 1 시간마다 폴링 데이터베이스를 업데이트 한 다음 그 1 시간 내에 모든 노래를 예약하는 것이 내가 원하는 것입니다. 가능하지 않습니까? – user2511713

+0

@ user2511713, 왜 노래 하나당 하나의 스케줄러가 필요합니까? – SimonC

+0

고마워,이게 내가 원했던거야. :-) – user2511713

관련 문제