参考Java Timer Class或ScheduledExecutorService interface,我可以在执行程序线程(其他调度程序)的run方法(或TimerTask)中设置调度程序(或计时器)吗?
案例研究: 我有一个包含歌曲列表(10,000)的数据库和播放歌曲的时间表。
所以我考虑创建一个调度程序(比如1)(1个小时),它将搜索数据库并为计划在一小时内播放的所有歌曲创建调度程序。
一小时后,scheduler1将删除所有线程并再次搜索数据库并为其他线程创建调度程序。
这是一个好主意吗?可以创建?
或者我应该一次创建10000个调度程序吗?
在这种情况下哪一个会更好的计时器或调度程序?
答案 0 :(得分:1)
为什么不拨打ScheduledExecutorService.scheduleAtFixedRate或ScheduledExecutorService.scheduleWithFixedDelay?
<强>更新强>
这是实现你想要的东西的一种方式:
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);
}
}