Threads em Javafx pt.2 construindo uma tarefa Task

Threads em Javafx pt.2 construindo uma tarefa task 





o que é uma Task?

Task é uma classe JavaFX que esta no pacote JavaFX.Concurrent .*;

esta instancia realiza tarefas em segundo plano, ela é iniciada por uma Thread 

ou utilizar classes concurrent do pacote java.*; ou javafx.*; é capaz de realizar

 uma interface para tarefas em segundo plano de um aplicativo JavaFX...


Algumas classes e métodos serão comentados um pouco neste artigo.

A Task e as classes necessárias para inicializa-la e monitora-la são varias 

e são muitas possibilidades no desenvolvimento de uma aplicação com tarefa

 utilizando Thread ,Service e Worker.


Assim como uma Thread e suas subclasses ,algumas ate explicadas nos artigos 

passados outros fornecido neste artigo a Task é uma classe abstrata ou seja ela implementa 

um método abstrato chamado call();

Por este método você pode realizar a logica da tarefa em uma subclasse do Task que é retornada 

um tipo de dados do objeto.

Você pode verificar os métodos mais comuns na própria documentação da classe Task 

Documentação da classe Task AQUI


Repare o diagrama do ciclo de uma Task;



Uma tarefa Task pode sim manter a tarefa em segundo plano durante a aplicação e fora da 

aplicação mais não depois que a aplicação for finalizada diferente de uma thread como já vimos.


Em algumas condições esta tarefa pode impedir o método updateMensenger() ou updateValue() 

e travar a tela inicial ou simplesmente toda aplicação, alocando memoria e criando instabilidade

as vezes ate impedindo o processo do aplicativo de ser finalizado


por isso podemos utilizar sim a thread do pacote java.lang ou classes de pacotes Concurrent do javafx 

como por exemplo o  "Service ou Worker" utilizado no java ou Javafx ate porque agora as bibliotecas 

ja estão atualizadas e disponível a toda plataforma java melhorando ainda mais com recursos 

de rede, web ,hardware e gráficos além soluções para dispositivos moveis...

inclusive nas sdk's anteriores a jfx2...


Pode utilizar como alternativa algumas classes como por exemplo o  ExecutorService

 ExecutorService porque além de ser de um pacote  do Java.Util.*; também, pode executar uma tarefa Task

 organizando cada Task no momento certo que elas devem ser executadas .

O Service é uma classe nativa do JFX e pode oferecer vários métodos abstratos para desenvolver

 um aplicativo utilizado o Task ou Threads

Você pode ver a documentação dos pacotes Lang Concurrent e JavaFX Concurrent contidos neste artigo 

pacote Java.lang 

pacote Java.util

pacote Javafx.Platform

pacote Javafx.Concurrent


repare cada instancia da classes



Utilizando Thread 

 ...


...


ExecutorService.

diagrama.



Utilizando o ExecutorService para gerenciar uma tarefa Task,  

configura uma therad separada apenas para Task que vai ser executada no momento

além disso a classe pode manipular varias Tasks simultâneas em segundo plano

repare utilizando o ExecutorService que apesar de ser um  pacote java.util.concurrent 

consegue o basicamente mesmo resultado.

...


...     

Runnable ou Platform

ciclo. 


Porem uma alternativa melhor nesta situação e talvez mais ágil seria a própria Platform.rum later() do Javafx , porque ela além de gerenciar as próprias threads em segundo plano de uma aplicação javafx 

ela também pode fazer esta chamativa da classe task para executar diversas classes e métodos

Documentação Platform Aqui

Documentaçao Runnable Aqui

repare  

 ...


...

      


Service  

diagrama.


     

...


...


 Service entre todas opções seria a melhor ,por ser uma claSse javafx ela

 tem uma estrutura mais completa para poder manusear uma Task ou outras classes 

derivadas do pacote javafx.concurrrent .

Neste próximo exemplo vai como base esta classe .

 documentação Aqui_JFX2 , Aqui_JFX17   


Mais seguindo os comentários vamos a aplicação...

este exemplo vai fazer  uma leitura de 0 a 10000 e irar imprimir.  

Também dentro de uma condição de processamento irar imprimir os números

 divisíveis por 50 ...ate completar o ciclo do Service;


vou manter os dois exemplos repare que vai ser utilizado

alguns métodos de update , valores, title, e mensagens do Task e do Service


primeiro uma breve explicação de como funciona uma Task


  Task <Interger> task=new Task<Void>() {...metodos  abstratos};

"instancia de classe <tipo do objeto de retorno> variavel da instancia = new "instancia com um bloco contstrutor"

seguindo na subclasse da Task estar o método construtor call(){} onde é criado o código que vai rodar uma tarefa.



Aplicação utilizando Service.

...


...

por ultimo neste artigo vamos falar um pouco sobre Worker

pra tentar simplificar o máximo esta classe vamos ter em mente que uma thread criada para aplicativos javafx.

Porem uma classe Worker não é uma classe Thread apesar de funcionarem de maneiras parecidas

elas não são mesma coisa porem uma classe Text e Label podemos dizer que tem a mesma função não é mesmo?


A Worker  implementa métodos principalmente através das classes Task e Service facilitado muito o Trabalho Task e outras classes do JavaFX

fornecendo métodos abstratos e de retorno de objetos


repare neste diagrama

 



o Worker pode retornar algumas resposta de retorno como condições de processamento

por exemplo  ready, failed ,cancelled, suceeeded ,running

nesta próxima aplicação vou fazer alguns métodos principais no Worker 

...

...


Bom estes são alguns métodos para manusear uma classe de tarefas em segundo plano com JavaFX

No próximo e ultimo artigo vai ter um aplicativo especial utilizando algumas classes contidas neste e nos artigos anteriores

 faça uma boa leitura.


Downloads:

Código fontes :  Aqui

Projetos : Aqui

Comentários