问题标签 [scheduledexecutorservice]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 我可以在不保留引用的情况下检索在 ScheduledExecutorService 中运行的任务吗?
我目前正在修改一个应用程序以使用 aScheduledExecutorService
代替 aTimer
并且我曾经使用我保留的 a 访问计划任务Map
,它允许我访问cancel()
该任务以及访问它。
使用这个 API,我似乎必须维护两个Map
s,一个用于访问任务,一个用于SheduledFuture<?>
返回的 sschedule()
以便能够取消它们。
我读了这篇文章,但与我使用 a 所做的相比,它看起来非常繁重Timer
(只Map
需要一个)。
这是一个简单的应用程序,它有两个需要访问和取消的任务。
有什么我没有得到的,或者“执行者”不是我需要的东西吗?
java - 为什么我的消息在 ScheduledExecutorService shutdownNow 时丢失
在我的 Web 应用程序中,我向 ScheduledExecutorService 提交了一个可运行的实例。在可运行实例中,我通过使用receiveNoWait 方法从IBM MQ接收消息,并且会话处于CLIENT_ACKNOWLEDGE模式。当我调用 ScheduledExecutorService 的 shutdownNow 方法时,接收方法有时会丢失一条消息而没有调用确认方法。对我有什么建议吗?
这是接收消息的代码。
尝试{
当ScheduledExecutorService关闭时,我只能看到第一个loginfo,没有任何异常。logger.info("获取消息");
消息 msg = consumer.receiveNoWait();
logger.info("获取消息成功");
返回味精;
} 捕捉(可投掷的 e){
logger.error("处理数据的时间出现异常", e);
返回空值;
}
mysql - Java调度线程杀死数据库
工具:Spring 3.0、Hibernate 2.0、Java 6
大多数类似的线程都建议安装缺少的库,更正配置文件等,但我的项目运行良好。一个模块正在制造问题
我想做的事:在应用程序启动时创建一个线程。在 Web 应用程序中记录用户请求,将它们放入队列中。线程每 60 秒读取一次队列,并调用事务方法来持久化队列。
数据结构: ConcurrentLinkedQueue - 仅在创建 bean 时初始化一次
的定义init()
线程:在另一个类中,一个线程被安排在 60 秒的固定时间间隔后执行
持久性:定义save()
申请日志:
应用程序在本地计算机上运行没有任何问题,但在服务器(亚马逊 AWS bitnami tomcatstack)上运行几个小时后。无法访问数据库(MySQL)。显然,MySQL 死了。可能是因为孤儿连接太多或其他原因,但我还没有弄清楚。
mysql -u root -p
生成此错误ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/opt/bitnami/mysql/tmp/mysql.sock' (2)
堆栈跟踪:
我希望这是有道理的。
java - Java scheduleAtFixedRate 2 次后停止工作
我有这个代码:
exec 在我的班级中声明为: private ScheduledExecutorService exec;
我收到“获取消息....”消息 2 次,然后它就停止了。我无法解释为什么。图形用户界面仍在工作。那么这里发生了什么?
java - 在 Scheduler(Timer) 的 run 方法中创建 Scheduler(Timer)
参考Java Timer Class或ScheduledExecutorService 接口,我可以在执行线程(其他调度程序)的运行方法(或 TimerTask)内部设置调度程序(或计时器)吗?
案例研究:我有一个数据库,其中包含歌曲列表(10,000)和播放歌曲的时间安排。
所以我想创建一个调度程序(比如 1)(周期 1 小时),它将搜索数据库并为计划在一小时内播放的所有歌曲创建调度程序。
一小时后,scheduler1 将删除所有线程并再次搜索数据库并为其他线程创建调度程序。
这是个好主意吗?可以创建吗?
或者我应该一次创建 10000 个调度程序?
在这种情况下,哪一个将是更好的计时器或调度程序?
java - 如何在应用服务器中处理不同数量的定时作业
我正在使用带有 hibernate、spring 和 jpa 的 glassfish 来获取进入我们系统并向客户显示数据的数据。
但是,我还需要每分钟运行多个作业以根据传入数据计算数据。
但我永远不知道工作的数量,因为它们来自数据库,所以它们可以随时更改。我们有 x 个客户,每个客户可以有 1 到多个工作。
所以我真正需要做的是:
- 从表中读取以获取要运行的作业数
- 每分钟运行这些作业
- 如果从表中删除作业,则停止处理该作业
- 如果将作业添加到表中,则将新作业添加到列表中。
- 这些作业中的每一个都将从表中读取,进行一些计算,然后将结果写入表中。
我已经阅读了一些工具(石英、ScheduledExecutorService 等),但有没有真正提供这个功能?还是我必须自己写?
tomcat - 在tomcat上部署ScheduledExecutorService
我一直在使用周围的蜂鸣器控制示例来完成这项工作。它确实有效,但我需要将它集成到 Tomcat 服务器。我知道我必须使用侦听器并将其添加到 web.xml 文件中,但是有任何分步教程吗?或者谁能给我部署它的步骤?
谢谢
java - 如何编写一个由于 scheduleExecutorService.shutdown 没有被调用而失败的测试?
我正在通过一个ScheduledExecutorService
作为合作者的单位进行 TDD。这个单元有一个start
方法,它基本上用任务启动执行程序,我现在想编写驱动该stop
方法的测试,因为我知道没有人会调用ScheduledExecutorService.shutdown
线程将挂起(默认情况下不是守护线程)。
我想通过@Test(timeout = 5000L)
并使用实际的执行程序服务(而不是确定性服务)来构建单元,但我面临的问题是由于某种原因测试没有挂起。
我认为,不确定,这与 Intellij/Junit 混合调用system.exit
和杀死“我的”jvm 有关。
在我用一种main
方法编写的手动“测试”中,我可以验证在不调用该shutdown
方法的情况下系统确实卡住了。
关于如何测试这个的任何想法?
谢谢
更新
我整理了一个小代码示例来说明问题:
java - 无法显示捕获的异常 (newSingleThreadScheduledExecutor)
对于计划执行者:
对于 processTask 方法:
我知道任务失败是有原因的,我不希望它在那之后继续(我使用 executor.shutdown() 来取消它)。
我只需要知道捕获异常时的错误是什么。在上面的方法中似乎没有这样做。
提前感谢您的任何回复。
java - 使用执行器框架还是普通线程?
最近收到一个面试题:
有一种情况,一个线程在一小时的间隔内执行批处理操作,你会使用执行器框架还是普通线程,为什么?
我很困惑 。
由于只有一个线程,因此不需要执行器服务。我可以使用while
and来做到这一点sleep
。
虽然有一个 ScheduleExecutorService 提供了这么多调度方法?
什么是最好的方法?