gpt4 book ai didi

java - 在 Scheduler(Timer) 的 run 方法中创建 Scheduler(Timer)

转载 作者:行者123 更新时间:2023-12-01 14:23:25 25 4
gpt4 key购买 nike

引用Java Timer ClassScheduledExecutorService interface ,我可以在执行线程(其他调度程序)的run方法(或TimerTask)中设置调度程序(或计时器)吗?

案例研究:我有一个数据库,其中包含歌曲列表(10,000 首)并安排播放歌曲的时间。

因此,我想到创建一个调度程序(例如 1)(周期为 1 小时),它将搜索数据库并为计划在一小时内播放的所有歌曲创建调度程序。

一小时后,scheduler1 将删除所有线程,并再次搜索数据库并为其他线程创建调度程序。

这是一个好主意吗?可以创建吗?

或者我应该一次创建 10000 个调度程序?

在这种情况下,计时器和调度程序哪个更好?

最佳答案

为什么不直接调用 ScheduledExecutorService.scheduleAtFixedRateScheduledExecutorService.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);
}
}

关于java - 在 Scheduler(Timer) 的 run 方法中创建 Scheduler(Timer),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17362786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com