问题标签 [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 - Java 调度器执行器
最近我编写了必须限制请求吞吐量的代码。我用过ScheduleExecutorService.scheduleAtFixedRate
并且我相信它应该可以完成工作(它确实做到了!)但是我写了一些测试来检查计划任务的时间,我很惊讶。最初的几个任务没有像 javadoc 用 n*period 解释的那样安排。谁能解释我错过了什么?如果它以这种方式工作,那么为什么 javadoc 中没有提到它?然后问题是调度程序究竟是如何工作的?我想避免寻找来源:)
例子:
如果你运行这个程序,你会发现很少有第一次没有按预期记录。为什么?
java - 当 Future.get() 的返回值太大时,有没有替代的解决方案?
我得到一个大的 ScheduledFuture 数据作为 Future.get() 的返回。我相信 ScheduledFuture 只能在 get() 完成时检索返回。所以它总是会在我的机器上生成“java.util.concurrent.executionexception java.lang.outofmemoryerror java heap space”错误。
当我使用 scheduleExecutorService 时,是否有任何替代解决方案可以将我的退货分成几部分?谢谢。
java - Java 中的 ScheduledExecutorService 和线程
调度程序如何在这里工作?它是否在后台创建一个新线程并像回调一样在主线程中执行 Run 方法。? . 当run方法被执行时,它是否属于主线程?
谢谢。
java - Java并发:运行直到终止
我目前正在重构一段代码,几乎是这样的:
这个想法是我想使用 aScheduledExecutorService
来运行代码:
不过,我对此有一些担忧:首先,程序main()
在调度后“终止”(如返回),但 JVM 保持活动状态,因为它ScheduledExecutorService
仍在运行。我相信这是故意的,为了保持旧代码的“一直运行直到从外部终止”的行为,但我相信我必须安装一个关闭挂钩以确保ScheduledExecutorService
正确关闭。真的会是这样,还是“从外部杀死”也会阻止执行关闭挂钩?
其次,我也对首先有一个关闭钩子感到不安。如果我有类似的代码
是否还会存在与上述相同的“从外部杀死”的担忧?
编辑:是的,原始程序循环通过而没有打破循环;它只是从 SIGINT (终端中的 control-C)终止。这是一个定义不明确的终止条件,但这是我现在唯一拥有的东西......
java - 使用 servlet 在 Java EE 环境中启动和停止 ScheduledExecutorService
我们有一个需求,我们需要使用简单的 servlet 应用程序通过 JMX 监控远程 JVM 详细信息。所以到目前为止在独立应用程序中所做的事情是
1) 创建一个 JMX 连接器并获取内存数据 --> 完成 2) 我们需要不断地监控并获取记录(2.1> 这可以被认为是持续延迟的计划任务并将记录插入 DB 或 2.2> 是否如果是,JMX 会给出历史记录,要访问哪个 MBean 以获取信息?)。
这里我打算使用一个接口来注册域,然后就可以了。有来自 JSP 的启动和停止按钮。功能是当我们单击启动时,系统将运行调度程序(ScheduledExecutorService)并在后台捕获记录以提供历史记录。当用户点击停止时,调度程序必须停止后台进程。问题是我们如何控制和获取调度器的对象?
1)换句话说,我们如何通过 servlet 启动和停止 ScheduledExecutorService ?从一个 servlet 启动一个线程并从另一个 servlet 停止一个线程以执行特定任务?
2)如果我们有一个集群/负载平衡的环境怎么办?
目前我正在考虑将每个 ScheduledExecutorService 添加到 HashMap 中,关键是任务对象和值是使用 SingleTon 设计模式的 ScheduledExecutorService。是否有任何默认方法。SingleTon 的整个循环处于集群/负载平衡环境中,我们可能无法获得适当的更新对象。
期待您的宝贵建议。
java - 从期货抛出的 InterruptedException
假设我有一个方法如下:
an 是如何InterruptedException
被抛出(并陷入poll()
)的?可调用对象(包括InterruptedException
,对吗?)抛出的任何东西都会是ExecutionException
,我们永远不会取消任何期货,并且shutdownNow()
永远不会调用服务。
顺便说一句:既然如此,是否有可能使这种轮询方法对诸如此类的事情更加防弹InterruptedException
?
java - Java ScheduledExecutorService - 循环重叠
我的 ScheduledExecutorService 旨在每 30 分钟运行一次 - 每次开始和半小时(09:00、09:30 等)。当任务少于 30 分钟时,它已设置并运行良好。
如果在一个周期实例中执行时间超过 30 分钟,我应该期待什么:
- 多个循环同时运行(例如 - 一个从 09:00 开始的循环可能在 09:40 结束,但另一个循环在 09:30 开始,这两个循环并行运行)
- 整个每 30 分钟的执行方案现在将移动长周期的额外执行时间(例如 - 从 09:00 开始的一个可能在 09:40 结束,应该在 09:30 开始的一个将立即在09:40)。
非常感谢 !
java - 从后台线程更均匀地分配负载
我有一个每 5 分钟运行一次的后台线程。我正在使用ScheduledExecutorService
这个。每五分钟,我都会调用我的一项服务并解析从该服务返回的响应。
现在上面的代码在 1000 台机器上运行,它们都同时启动,这意味着它将每 5 分钟同时对我的服务进行所有 1000 次调用。我试图将负载更均匀地分布在 5 分钟的窗口中。上面的代码有可能做到这一点吗?
我只是想在 5 分钟的窗口内将负载更均匀地分布在我的服务上,这样它就不会同时影响我的服务,这将在所有系统同时启动后施加更多负载。
我想出了下面的代码,试图在五分钟的窗口中更均匀地分布负载:
这是在 5 分钟窗口内均匀分布负载的正确方法吗?
java - 如何每周、每月和每六个月运行一项特定任务?
我正在用 Java 做一个 cron 工作。我想每周、每月、三个月、六个月和九个月运行一项特定任务。
我正在这样运行它-
我想TestTaskA
每周、每月、每三个月、每六个月、每九个月运行一次,我不想在晚上 8 点到凌晨 5 点之间运行任务。任何随机的一天也可以。
现在,如果我TestTaskA
每周都运行,那么它应该打印出来one-week
,report_week
如果它每个月运行,那么它应该打印出one-month
and report_one_month
。三个月、六个月和九个月也是如此。
做这个的最好方式是什么?请记住,我可能还有 TestTaskB 和 TestTaskC,我应该每周、每月、三个月、六个月和九个月运行它们。
我可以用ScheduledExecutorService
这个吗?任何简单的例子都会对我有很大帮助。
java - ListenableScheduledFuture 和 ListeningScheduledExecutorService
我正在通过以下代码创建一个 ListeningScheduledExecutorService 实例
如番石榴文档中所述。
但是当我打电话时
变量“future”属于“ScheduledFuture”类型,而不是“ListenableScheduledTask”类型。
我有什么遗漏吗?