JavaFX 8任务和服务之间有什么区别,在哪种情况下使用一个比另一个更好?数据库操作用什么比较好?
任务和服务之间的主要区别 - 一次性执行与重复执行
任务是一次性的——您只能使用一次任务。如果您想再次执行相同的任务,您需要构造一个新的任务实例。
服务具有可重用的接口,因此您可以多次启动和重新启动单个服务实例。在幕后,它只是将任务定义作为输入并根据需要创建新任务。
示例用例
任务示例=
服务示例=
建议——最初尝试只使用任务而不是服务来解决问题
在你更熟悉JavaFX中的并发之前,我建议坚持只使用任务而不是服务。任务的界面稍微简单一些。您只需在需要时创建新的 Task 实例即可完成服务执行的大部分操作。如果在了解 Task 后,您发现自己需要一个预定义的 API 来启动或重新启动任务,请在那时开始使用 Service。
使用任务的数据库访问示例
任务或服务都适用于在JavaFX应用程序线程之外执行数据库操作。使用哪个取决于您的个人编码偏好以及正在执行的特定数据库操作。
这是一个使用任务通过JDBC访问数据库的例子。该示例是为Java FX-SQL查询的后台线程创建的。
背景资料
JavaFX并发教程很好地概述了任务和服务。
任务和服务javadoc中有很好的文档,包括示例用例的示例代码。
Worker、任务和服务定义(来自Javadoc)
Task和Service都是Worker,因此它们具有以下共同点:
Worker是一个在一个或多个后台线程中执行某些工作的对象,其状态是可观察的,可用于JavaFX应用程序,并且可从主JavaFX Application线程使用。
任务定义:
FutureTask的完全可观察实现。Tasks公开了对JavaFX中的异步任务编程有用的附加状态和可观察属性。由于Service是为执行Task而设计的,因此应用程序或库代码定义的任何Task都可以很容易地与Service一起使用。
服务定义:
服务是一个非可视组件,它封装了在一个或多个后台线程上执行某些工作所需的信息。作为 JavaFX UI 库的一部分,该服务了解 JavaFX 应用程序线程,旨在减轻应用程序开发人员管理与用户界面交互的多线程代码的负担。因此,服务上的所有方法和状态都旨在以独占方式从 JavaFX 应用程序线程调用。
服务实现工作线程。因此,您可以观察后台操作的状态并选择性地取消它。服务是可重用的工作线程,这意味着它可以重置和重新启动。因此,可以声明方式构造服务并按需重新启动。
以下语句都可以直接在InfluxDB的Web管理界面中调用 # 创建数据库 CREATE DATABASE "db_name" # 显示所有数据库 SHOW DATABASES # 删除数据库 DROP DATABASE "db_name" # 使用数据库 USE mydb # 显示该数据库中的表 SHOW MEASUREMENTS # 创建表 # 直接在插入数据的时候指定表名(weathe
数据库的操作是每个phpweb框架的核心功能,我们提供数据库数据库的标准调用模式为: 你可以执行严格模式,也就是左边的那条线,Controller->Service->Dao->Model->DB,也可以走简单模式 Controller->Model->DB。个人根据自己的需求,走标准麻烦些(几乎所有的机构和系统都是这样^_^), 但是扩展性会好些,但是使用简单模式开发效率就会高些,性能会好些,但
这一小节是对数据库操作做一个简单的封装,不涉及复杂的事务操作等。 我选用了Sql2o作为底层数据库框架作为支持,它的简洁易用性让我刮目相看,后面我们也会写如何实现一个ORM框架。 /** * 数据库支持 * @author biezhi * */ public final class MarioDb { private static Sql2o sql2o = null;
要从我们的兼容 Swift 的服务中获取数据,你可以执行 GET 请求,在身份验证期间使用 X-Storage-Url 的值来获取。 列出所有容器 一个指定API版本和帐户的 GET 请求将返回特定 用户帐户的容器列表。因为这个请求返回一个特定用户 的容器,所以该请求需要一个身份验证令牌。这种请求 不能匿名。 语法 GET /{api version}/{account} HTTP/1.1 Hos
我有一个场景,如果数据库的事务启动,那么在启动的事务被提交或回滚之前,不允许执行任何读取和更新操作。 例如:如果我尝试插入一行,那么需要对数据库中已有的行进行一些特定的更改,如果任何其他事务或数据库查询在更改完成之前读取了数据,那么数据库中的值就会变差,因此如何控制查询。 我真正想做的是,当一个事务开始时,我想锁定数据库,怎么做? 我正在使用Hibernate transaction(声明性事务)
我试图弄清楚如何在使用actor系统时最好地处理数据库操作。事实上,数据库操作正在阻塞,而我们试图在Akka中不阻塞。 我在主文档中提到了一种处理方法,那就是在路由器后面创建一个参与者池,可能是在一个单独的executionContext上,它将处理数据库访问。