2013-06-28 24 views
0

參考Java Timer ClassScheduledExecutorService interface,我可以在執行程序線程(其他調度程序)的run方法(或TimerTask)內設置調度程序(或定時器)嗎?在調度程序(定時器)的運行方法內創建一個調度程序(Timer)

案例研究: 我有一個數據庫,其中包含歌曲列表(10,000)並計劃播放歌曲的時間。

所以我想創建一個調度程序(比如1小時),它將搜索數據庫併爲計劃在一個小時內播放的所有歌曲創建調度程序。

一小時後,scheduler1將刪除所有線程,並再次搜索數據庫併爲其他線程創建調度程序。

這是一個好主意嗎?可以創建?

或者我應該一次創建10000個調度程序?

在這種情況下,哪一個會更好的計時器或調度?

回答

1

爲什麼不直接致電ScheduledExecutorService.scheduleAtFixedRateScheduledExecutorService.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