В чем разница между JavaFX 8 Task и Service и в каком случае лучше использовать один над другим? Что лучше использовать в операциях базы данных?Задача vs Служба для операций с базой данных
ответ
Главная разница между Task и услуг - один раз в сравнении с Повторные исполнения
Task это одноразовая вещь - вы можете использовать только один раз задачу. Если вы хотите снова выполнить ту же задачу, вам нужно создать новый экземпляр Task.
A Service имеет интерфейс многократного использования, так что вы можете запускать и перезапускать один экземпляр службы несколько раз. За кулисами он просто принимает определение задачи как ввод и создает новые задачи по мере необходимости.
Пример Прецеденты
Пример задача => мониторинг и отчетность хода выполнения длительного запуск задачи по инициализации приложения, как этот Splash Page example.
Пример обслуживания =>internal load worker implementation for WebEngine, где одна и та же задача, загружая страницу асинхронно, должна повторяться для каждой загруженной страницы.
Рекомендация - Сначала попытайтесь решить проблему, используя только задачу, а не Служба
Пока вы больше знакомы с параллелизмом в JavaFX, я бы посоветовал придерживаться только с помощью задачи, а не услуг , Задачи имеют несколько более простой интерфейс. Вы можете выполнить большую часть того, что делает Служба, просто создав новые экземпляры задач, когда они вам понадобятся. Если после понимания «Задачи» вы обнаружите, что хотите получить предопределенный API для запуска или перезапуска задач, тогда приступайте к использованию Сервиса в это время.
Доступ к базе данных с использованием образцов Задачи
Либо Task или служба будет работать для выполнения операций с базами данных прочь поток приложения JavaFX. Это зависит от ваших личных предпочтений кодирования, а также от конкретной операции с базой данных.
Вот пример, который использует Task to access a database via JDBC. Пример был создан для JavaFX - Background Thread for SQL Query.
Справочная информация
JavaFX concurrency tutorial обеспечивает хороший обзор задачи и услуг.
В документации Task и Service имеется отличная документация, в том числе примерный пример использования.
работник, определение задач и обслуживания (от Javadoc)
Задача и обслуживание оба Workers, так что они имеют общую черту:
Работник является объектом, который выполняет определенную работу в один или несколько фоновых потоков, а состояние пользователя является наблюдаемым и доступным для приложений JavaFX и может использоваться из основного потока приложений JavaFX.
определение Задача:
Полностью наблюдаемая реализация FutureTask. Задачи предоставляют дополнительные состояния и наблюдаемые свойства, полезные для программирования асинхронных задач в JavaFX. , Поскольку служба предназначена для выполнения Задачи, любые Задачи , определенные кодом приложения или библиотеки, могут быть легко использованы с помощью службы .
Определение сервиса:
Служба представляет собой не-визуальный компонент инкапсуляции информации , необходимую для выполнения некоторой работы на одной или несколько фоновых потоках. Как часть часть библиотеки интерфейса JavaFX, служба знает о потоке приложения JavaFX и предназначена для того, чтобы освободить приложение от бремени управления многопоточным кодом, который взаимодействует с с пользовательским интерфейсом. Таким образом, все методы и состояние службы предназначены для вызова исключительно из потока приложений JavaFX .
Служба осуществляет Работник. Таким образом, вы можете наблюдать состояние фоновой операции и, возможно, отменить ее. Сервис является многоразовым Работник, то есть его можно перезагрузить и перезапустить. В связи с этим услуга может быть построена декларативно и возобновлена по требованию.
+1 очень тщательный и точный ответ! – assylias
Я думаю, что путаница в определениях заключается в том, что в служебной документации говорится о «освобождении разработчика приложения от бремени управления многопоточным кодом, который взаимодействует с пользовательским интерфейсом», но задача не говорит об этом в прямой способ. Почти похоже на то, что вам нужно использовать службу, а не задачу для этого. – w1res