当前位置: 首页 > 知识库问答 >
问题:

在计划程序(计时器)的运行方法中创建计划程序(计时器)

易扬
2023-03-14

关于Java定时器类或ScheduledExecutorService接口,我可以在执行器线程(其他调度器)的运行方法(或TimerTask)内设置调度器(或定时器)吗?

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

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

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

这是个好主意吗?可能创造?

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

在这种情况下,哪一个是更好的计时器或调度器?

共有1个答案

凌和悦
2023-03-14

为什么不直接调用SchduledExecutorService.scheduleAtFixed比率或SchduledExecutorService.schedulewith FixedDelay?

使现代化

这是实现(我相信)你想要的一种方法:

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);
  }
}
 类似资料:
  • 问题内容: 我已经阅读了几次此页面,只是没有看到GWT 和类之间的某些固有差异。我正在寻找以下各项的用例和适用性: ,和 这些似乎或多或少都在做着相同的事情,感觉您可以使用所有这些东西实现相同的目标。这仅仅是GWT的一种方式,提供了多种完成同一件事的方式吗?如果没有,请帮助我了解何时何地适当使用它们。 问题答案: 如果需要浏览器完成当前正在执行的操作,然后再告诉它执行其他操作,请使用 Schedu

  • 我对方法的期望(根据我在中给出的理解,其中每次执行都是在前一个任务执行完成后安排的)应该在第1行之后创建两个线程。 一个用于计时器,它为任务生成另一个线程。一旦第一个任务线程死亡,将创建另一个任务线程并继续执行。但在调试点,我只看到一个线程对应于计时器。为什么不为实现可运行的任务执行线程? 我对scheduleAtFixedRate()方法的期望(根据我在javadocs中给出的理解,其中每个执行

  • 我正在编写一个Android应用程序,每10分钟录制一次音频。我用定时器来做这件事。但是scheduleAtFixedRate和scheduleAtFixedRate之间有什么区别呢?使用其中一种方法是否有性能优势?

  • 本文向大家介绍长期计划程序和短期计划程序之间的区别。,包括了长期计划程序和短期计划程序之间的区别。的使用技巧和注意事项,需要的朋友参考一下 长期计划者 长期调度程序也称为JOB调度程序。它维护程序/作业的队列,这些队列被选择供系统处理。根据调度机制选择程序并进行处理。长期调度程序控制着多重编程的程度。 短期计划者 短期调度程序也称为CPU调度程序。它维护上下文切换,并且CPU在多个线程之间切换。短

  • 我正在建立一个Android应用程序,必须定期做一些服务。我发现使用< code > ScheduledThreadPoolExecutor 和< code > ScheduledExecutorService 比< code>Timer更好。 有人能解释一下和的区别吗?哪款更适合Android? 更新 我刚刚发现这篇文章和这篇文章解释了实现重复周期性任务的几种方法之间的区别。在我的情况下,和更合

  • 在命令行上手动执行时,作业可以完美地运行。当调度程序执行相同的命令时,作业立即挂起,在skybot日志中没有输出,作业也没有完成任何工作。我们调查了可能的权限问题,但都不存在。spring批处理文档指出,可用于从shell运行计划的作业,但所有作业在执行时都立即挂起。我们怎样才能解决这个问题呢?