Светлый фон

Результатом выполнения задачи 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 отображает ход вычислений, производимых в фоновом потоке.