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属性。
相关推荐
In Pro JavaFX 2: A Definitive Guide to Rich Clients with Java Technology, Jim Weaver, Weiqi Gao, Stephen Chin, Dean Iverson, and Johan Vos show you how you can use the JavaFX platform to create rich-...
应用的主类需要继承自Application类,main方法调用launch方法启动应用,而start方法则负责构建和展示舞台(Stage),这是应用的用户界面核心。舞台可以包含一个或多个场景(Scene),场景由各种控件、形状和图形组成...
日期控件在JavaFX2中通常由`DatePicker`类提供。`DatePicker`控件允许用户通过日历视图或输入框选择日期。以下是一些关于JavaFX2日期控件的关键知识点: 1. **DatePicker类**:这是JavaFX2中的日期选择组件,它提供...
javafx2-demo
In Pro JavaFX 2: A Definitive Guide to Rich Clients with Java Technology, Jim Weaver, Weiqi Gao, Stephen Chin, Dean Iverson, and Johan Vos show you how you can use the JavaFX platform to create rich-...
在JavaFX2中引入第三方字体是一项常见的需求,它允许开发者为应用程序添加独特的视觉风格。本文将详细介绍如何在JavaFX2中使用自定义字体,并通过一个简单的示例——`CustomFontApp`来阐述整个过程。 首先,你需要...
在JavaFX 2.x中,地图缩放和拖拽功能是构建交互式地图应用的关键部分。这个技术允许用户通过鼠标操作来改变地图的视角,放大查看细节或缩小以获取更广阔的视图,同时还能通过拖动来移动地图,查看不同区域。下面我们...
JavaFx2-api.chw虽然用的人少了,但是是个好东西
JavaFX SDK 17.0.2 LTS 是一个用于创建桌面和基于浏览器的富客户端应用程序的工具包,专为Windows x64平台设计。这个版本是长期支持(LTS)版本,意味着它将提供更长期的维护和支持,适合于那些需要稳定开发环境的...
JavaFX2 API chm文件
### JavaFX 2:关键技术与应用开发概览 #### 章节1:JavaFX快速入门 本章节作为《Pro JavaFX 2》一书的开篇,旨在为读者提供一个快速进入JavaFX世界的机会。JavaFX是Sun Microsystems在2007年的JavaOne大会上宣布...
Javafx2 系统托盘实现
在下载的压缩包文件中,"javafx_scenebuilder-2_0-windows.msi"是一个Windows安装程序文件,这意味着它是专门为Windows用户准备的。安装此文件后,开发者就能在Windows系统上使用JavaFX Scene Builder 2.0,从而加速...
2. **示例代码**:可能包含`samples`目录,其中提供了使用JavaFX编写的示例应用程序,帮助开发者理解和学习如何使用JavaFX进行开发。 3. **文档**:SDK可能还包括API文档,通常位于`docs`目录下,这对于查阅JavaFX...
JavaFX2_编程语言
JavaFx 2.X 记事本 需要demo的 可以找我
通过`javafx.scene`包下的类,例如`Group`、`Shape`和`Scene`,可以绘制各种几何形状,添加动画效果,实现复杂的视觉呈现。如果这个Demo包含图形元素,我们可以学习到如何在JavaFX中绘制和操作2D或3D图形。 媒体...
### JavaFX 2.0 的 FXML 语言高级教程 #### 概述 JavaFX 2.0 引入了一种新的声明性标记语言——FXML(发音为 “fizz-le”),这是一种基于 XML 的语言,专门用于定义应用程序的用户界面。通过使用 FXML,开发者...
javaFX2的文档,官方网站下载后再整理的,对致力于FX2的人有帮助。
不错的javaFX教程。比较全面系统的介绍了javaFX的入门知识。