JavaFX2的ScheduledService类

简介: ScheduledService类位于javafx.concurrent包下面,是用来定时执行循环任务的。 ScheduledService继承自Service类,Service类会在成功执行任务后自动重新开始下一次执行,在一定的条件下及时执行失败了也会重新执行的。

ScheduledService类位于javafx.concurrent包下面,是用来定时执行循环任务的。

ScheduledService继承自Service类,Service类会在成功执行任务后自动重新开始下一次执行,在一定的条件下及时执行失败了也会重新执行的。一个ScheduledService实例最初是READY状态,调用start()或者restart()方法后就变成SCHEDULED状态,然后持续该状态由delay指定的时长。

再进入RUNNING状态后ScheduledService就会开始执行它的Task,成功执行一次以后ScheduledService会变成SUCCEDED状态,然后变成READY,然后又开始SCHEDULED。在这个状态呆多久,取决于转变为RUNNING的时间、当前的时间和变量period值。简单点说,period定义了从一个Task开始到下一个的时长。如果执行完了period还是没到期,ScheduledService保持SCHEDULED状态等period耗完;反之,如果还没执行完period就到了,ScheduledService就立即开始RUNNINNG状态。

当在RUNNING的时候,ScheduledService抛异常了或者由于其他原因进入了FAILED状态,ScheduledService到底结束呢还是重新开始呢,取决于backoffStrategy, restartOnFailure 和 maximumFailureCount的值:

如果异常发生了而且restartonfailure是false,ScheduledService就进入FAILED停止了。只有调用restart方法才能重新运行;

如果异常发生了而restartonfailure是true,ScheduledService可能会自动重启。首先根据策略backoffstrategy的结果设置cumulativePeriod值,这样失败后会等待很久很久来重启;执行成功后cumulativePeriod就又变回period值;ScheduledService定义了几个静态策略,比如EXPONENTIAL_BACKOFF_STRATEGY 和 LOGARITHMIC_BACKOFF_STRATEGY,默认是后者。当maximumfailurecount达到后就和restartonfailure为false一样了。

如果执行过程中period或者delay改变了,它们将影响下一次执行。ScheduledService的典型应用是循环调用,比如以一定间隔ping一台主机:

 


 ScheduledService<Document> svc = new ScheduledService<Document>() {
     protected Task<Document> createTask() {
         return new Task<Document>() {
             protected Document call() {
                 // 连接主机
                 // 获取信息
                 // 转换成document
                 return document;
             }
         };
     }
 };
 svc.setPeriod(Duration.seconds(1));
 

这个任务每一秒执行一下。

不过这个类对于时间没什么太好的观念:不准确。一个非常忙的线程可能会引起比较严重的延迟。所以如果period或者delay的值很小可能不太准确,不过超过几百毫秒一般就相当可靠了。

ScheduledService的默认period和delay都是0,这样认为会立即一下一下地执行。想要取到执行的结果可以用lastValue属性。

 

目录
相关文章
|
算法
3D打印新突破!曼大等提出DQN多样化图形路径规划器:锐角转弯降低超93%,热变形减少25%
【10月更文挑战第28天】曼彻斯特大学等机构的研究人员提出了一种基于深度Q网络(DQN)的3D打印路径规划器,能够高效处理多样化图形结构。该规划器在多个应用中表现出色,包括线框打印、连续纤维打印和金属打印,显著提高了打印质量和效率。然而,其复杂性和可扩展性仍需进一步优化。论文链接:https://arxiv.org/pdf/2408.09198
160 6
|
Prometheus 监控 Cloud Native
微服务的监控与可观测性
【8月更文第29天】在微服务架构中,确保每个服务的健康状态和性能表现是非常重要的。为了达到这一目标,我们需要实施一套完整的监控和可观测性方案。本篇文章将介绍如何通过日志、指标和追踪来监测微服务的状态和性能,并提供相应的代码示例。
1006 0
|
Java API 开发者
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
【已解决】Spring Cloud Feign 上传文件,提示:the request was rejected because no multipart boundary was found的问题
1810 0
|
网络协议 安全 Python
python实现对网络流量分析
Python提供多种工具进行网络流量分析,如`pcap`库用于实时捕包,`dpkt`库用于解码数据包,以及`Scapy`库进行高级分析。
915 1
|
存储 移动开发 固态存储
计算机组成原理(3)-----外存储器
计算机组成原理(3)-----外存储器
1518 1
|
算法 索引 Python
BackTrader 中文文档(十五)(4)
BackTrader 中文文档(十五)
204 0
|
数据可视化 网络安全 开发工具
【新人必会】远程开发可视化 - VSCode篇
【新人必会】远程开发可视化 - VSCode篇
385 0
VisualStudio 调试 添加命令行参数
VisualStudio 调试 添加命令行参数
253 0
|
存储 SQL JSON
5、DataX(DataX简介、DataX架构原理、DataX部署、使用、同步MySQL数据到HDFS、同步HDFS数据到MySQL)(一)
5、DataX(DataX简介、DataX架构原理、DataX部署、使用、同步MySQL数据到HDFS、同步HDFS数据到MySQL)(一)
下一篇
oss云网关配置