sexta-feira, 27 de julho de 2012

Java - Utilizando Threads

Olá pessoal, hoje iremos conhecer um pouco mais sobre threads.

Threads são processos leves. Trata-se de uma linha de execução de um processo. Thread é uma forma do processo dividir a si mesmo em duas ou mais tarefas.

O Java já tem uma classe Thread. Nós podemos criar uma classe e extender a classe Thread do Java. Essa classe Thread do Java possui um método run(), esse método deve conter o código da thread. 

Thread é um código que vai executar por si mesmo, de forma independente, ou seja, uma nova linha de execução é criada. Veja o código abaixo da classe chamada MyThread que extende a classe Thread do Java:


Linha 4: variável do tipo long que irá guardar a quantidade de milisegundos para simular o tempo de execução de cada thread.

Linha 6: construtor da classe MyThread que recebe a quantidade de milisegundos que a thread deve ser executada.

Linha 10: método run(), esse método é da classe Thread do Java. Quando damos um extends na classe Thread, então sobrescrevemos o método run(), ou seja, implementamos ele colocando dentro dele o que a nossa thread irá executar. Quando o método run() termina, a thread também termina.

Linha 13: método wait() faz "esperar" pela quantidade de milisegundos que passamos para ele. Depois de esperar, então é impressa a mensagem da linha 15. Lembrando que tem que garantir o sincronismo quando for utilizar o método wait(), por isso foi usado synchronized. Caso não seja feito isso, então será gerada uma exceção em tempo de execução.

O método wait() também necessita está entre um bloco try/catch porque pode gerar uma exceção.

Vamos utilizar a classe MyThread, logo abaixo temos o código da classe Test:


Linhas 6 a 8: são criados três objetos da classe MyThread, um passando para o construtor 10000 milisegundos, outro 4000 milisegundos e o último com 6000 milisegundos. Lembrando que 1 segundo corresponde a 1000 milisegundos.

Você não deve chamar diretamente o método run(), mas sim chamar o método start(). O Java se encarrega de chamar o método run().

Linhas 10 a 12: chamada do método start() que dispara uma thread.

Outra forma de implementar threads é usando a interface Runnable. Não mudaria quase nada na classe MyThread. No lugar de extends é só colocar implements e no lugar de Thread coloca Runnable. Veja:

 

Veja como ficaria a classe Test

 

Geralmente é utilizada a interface Runnable ao invés de extender a classe Thread. Isso acontece porque em Java só é permitido herança simples. Se a sua classe já extende de Thread de outra classe, então você não vai conseguir extender de Thread.


Nenhum comentário: