Threads em JavaFX pt.1




Thread:

 O que é Thread no java? 

 Thread  é uma classe disponível no pacote "java.lang" que permite a criação de sequências de

 instruções para serem executadas de forma autônoma e paralela durante o ciclo de um programa ou processo. Ou seja, Threads são usadas para realizar operações independentemente em segundo plano 

 Pra tentar ser mais especifico e menos detalhista, vamos declarar que uma ou 

varias threads pode ser executadas em uma única aplicação .

Cada threads pode ser criada para gerenciar varias instruções em um único 

processo(aplicativo).


O uso das Threads pode melhorar a performasse do aplicativo de maneira muito eficiente.

Por exemplo recebendo e enviando dados, criando estatísticas e gerenciando controladores...

Rodando apenas em 1 aplicativo e sem perder instabilidade e exigindo o mínimo da maquina.

A desvantagem apenas ocorre quando por algum motivo a Thread se comporta de maneira

 inesperada criando deadlocks , lops ,bugs , erros no retorno e perdendo o processamento e 

instabilidade na aplicação.

diagrama de ciclo de uma Thread java.


Apesar de ser um assunto muito complexo ,principalmente por cada S.O e linguagem de programação

 ter suas próprias bibliotecas , métodos e classes para chamar uma Thread.


Vou tentar deixar um artigo bem simples e útil sobre Threads no JavaFX 

...agora que sabemos que as Threads são necessárias para aplicações ricas e de alto nível 

e que funcionam de maneiras paralelas para aumentar a eficiência e produtividade em um 

aplicativo 

Este vai ser um artigo de mais de 3 partes falando sobre Threads no JFX


Já podemos ver como elas se comportam em uma aplicação JavaFX.


Vou começar fazendo uma aplicação que vai criar duas Threads em um 

processo não especificamente em Javafx ,neste exemplo é utilizado 

o java.lang; disponível nos pacotes do JavaSE que não é importada no 

codigo pelo fato de ser um pacote java.lang


Documentação

 https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html


O primeiro  exemplo temos duas String para nomes onde vai ser armazenado 

1 nome pra peugeot e pra citroen e uma String strRNomes também para o resultado das condições de

escolhas de nomes.

Mais dois int pra armazenar a quantidade de carros produzidos e um outro para resultado 

dos cálculos de produção dos carros.


Então teremos duas Threads, uma vai calcular a quantidade de carros das montadoras

e outra vai definir qual foi a montadora que produziu mais automóveis .


1° Thered em funcionamento


repare.

...


...


Código aqui .

    Olhe que no bloco do ArranqueONE a classe thread e instanciada com uma expressão lambda  

    ela cria as instruções e define as variáveis, mais não retorna resultados para as classes de controle .

quem vai fazer isso em especial nesta condição vai ser a Platform.runLater(()->{...instruções}); 



A labelOne pode ser acessada dentro do bloco através do método fornecido pela classe 

javafx.application.*;

 Que alias é quem fornece a JavaSE acesso a uma Aplicação JavaFX isso a torna um pacote importante para aplicações ricas com alto desempenho gráfico e de hardware.

 também fornece a Thread uma resposta pela classe Platform utilizando um método com expreção lambda, Platform.runLater(()->{...instruções}); 

"em um outro momento iremos comentar sobre lambda ... quando disponível pode ser visualizado aqui"

mais informações sobre a classe Platform

https://docs.oracle.com/javase/8/javafx/api/javafx/application/Platform.html

 

Interface Runnable

 A interface Runnable foi implementada a partir do java 8 com ela  implementamos métodos para executar as instruções nas threads, ela pode ser manipulada de varias maneiras no Java.

É importante observar que existe maneiras de implementar uma classe Runnable e ao implementar a interface Runnable e fornecer uma implementação para o método run(), você pode criar objetos que representam tarefas que podem ser executadas em segundo plano.

...


...


No JavaFX é importante lembrar , sempre que uma aplicação for finalizada ,as Threads devem

ser finalizadas juntas anao ser que esta seja tarefa que precisa ser executada como prioridade.


Bem comum que algumas Threads passem despercebidos continuando seu funcionamento em segundo plano e alocando memorias mesmo com a aplicação finalizada, é uma ação, error ou pratica não recomendada... :D

   

Pra finalizar as threads que continuam abertas mesmo quando o aplicativo esta sendo finalizado

criando instabilidade e perda de performasse no S.O

Uma maneira de finaliza a thread principal da aplicação construída no javafx é 

utilizar o Platform.exit();

repare

...

...

Codigo Aqui

Com este método ao clicar em finalizar as Threads são finalizadas junto a thread  

Principal do aplicativo.


Neste próximo exemplo são adicionado  3 threads

1 vai fazer um laço de 1 a 10 outro de 10 a 20 e outro de 1 a 30

vai ser adicionado um sleep que vai funcionar como um Delay(); 

 contando com a velocidade da threads em Millis(); 


O computador vai tentar balancear cada Thread ao ponto que todas

 sejam executadas 

...


...




Codigo Aqui


Encadeamento em Threads

No 4° exemplo  uma lista de Threads a ser executadas.

encadeamento de threads seria criar uma Sequencia de threads para ser executadas 

uma após outra , e sempre que uma thread for finalizada ela inicia a próxima thread

e claro neste caso ....respeitando um tempo definido e uma sequencia de repetições em cada Thread

... 


...

código Aqui

neste momento vamos fazer uma ancora aqui

porque no próximo artigo vamos continuar comentando sobre Threads e Grupos de Threads para concluir tarefas o que muda é que nos próximo artigos vai ser mencionado apenas classes do JFX.

quando o artigo estiver disponível, pode ser visualizado aqui neste link



boa leitura.





Comentários