Результатом выполнения задачи Task в фоновом потоке является объект V, возвращаемый методом call.
Результат выполнения фоновой задачи может быть получен с помощью метода getValue класса Task.
В методе call разрешено вызывать только методы updateProgress, updateMessage и updateTitle класса Task, обновляющие текущее количественное выполнение задачи, максимальное количественное выполнение задачи, текущее процентное выполнение задачи, сообщение, связанное с текущим состоянием выполнения задачи, и заголовок данной задачи.
В то время как метод call выполняется в фоновом потоке, методы updateProgress, updateMessage и updateTitle класса Task выполняются в потоке JavaFX Application Thread.
Поэтому, переопределяя данные методы в конкретной реализации абстрактного класса Task и обеспечивая их вызов в методе call, можно передавать значения свойств workDone, totalWork, progress, message и title из фонового потока в поток JavaFX Application Thread.
Запуск экземпляра пользовательского класса, расширяющего класс Task, и соответственно вызов его метода call может быть выполнен различными способами.
Так как класс Task расширяет класс FutureTask, то запуск его экземпляра может быть осуществлен с помощью объекта java.lang.Thread.
Запуск объекта Task также может быть произведен с помощью программного интерфейса Java Executor API.
В этом случае необходимо создать объект java.util.concurrent. ExecutorService с помощью класса-фабрики java.util.concurrent. Executors и воспользоваться методом submit интерфейса ExecutorService для запуска объекта Task.
Для завершения работы объекта ExecutorService нужно применить метод shutdown интерфейса ExecutorService.
Помимо перечисленных выше способов, создание и запуск объекта Task обеспечивает сервисный класс Service пакета concurrent.
Абстрактный класс Service также необходимо расширять конкретной реализацией с переопределением его метода createTask, возвращающего объект Task.
Запуск объекта Service осуществляется с помощью метода start,
перезапуск объекта Service – с помощью метода restart,
а сброс объекта Service – с помощью метода reset.
Прерывание выполнения фоновой задачи обеспечивает метод cancel класса Service.
Получить результат выполнения фоновой задачи можно с помощью метода getValue класса Service.
В качестве примера выполнения фоновой задачи в JavaFX-приложении здесь приведен код, в котором индикатор ProgressBar отображает ход вычислений, производимых в фоновом потоке.