Introdução Thread em Java

            Esse post trás uma introdução sobre threads em Java. Suas principais estruturas e exemplos básicos de funcionamento.

Uma visão geral dos métodos de Thread

            A classe Thread  do pacote Java.lang tem vários construtores. O construtor Thread constrói um objeto Thread cujo o seu nome é o ThreadName.
public Thread (String threadName)
Cada thread é colocada no método run. O programa dispara a a thread com o método start. O método dispara uma InterruptedException se a thread que ele está tentando iniciar já tiver sido iniciada.
O método static sleep especifica quanto tempo a thread deve “dormir” em milissegundos.
O método interrupt é chamado para interromper uma thread.
O método setName configura o nome de uma thread.
Vale lembrar que todo aplicativo Java é multithread. Cada nova thread herda a prioridade da thread que a cria.

Exemplo de um programa em Java

/**
* Mostra múltiplas threads imprimindo a intervalos de tempo aleatórios
*/

public class ThreadTester{

      //cria e inicia as threads
      public static void main(String args []){

            PrintThread thread1, thread2, thread3, thread4;
            //cria 4 objetos print thread
            thread1 = new PrintThread("Thread1");
            thread2 = new PrintThread("Thread2");
            thread3 = new PrintThread("Thread3");
            thread4 = new PrintThread("Thread4");

            System.err.println( "\nIniciando as threads" );
            //comeca a executar as printThreads
            thread1.start();
            thread2.start();
            thread3.start();
            thread4.start();

            System.err.println ("Threads terminadas\n");

      }// fim da classe ThreadTester


}


      /**
      * Cada objeto desta classe escolhe um intervalo de adomormecimento aleatorio
      * quando uma printthread e executada, ela imprime o nome, adormece,
      * imprime o nome novamente e termina.
      */

class PrintThread extends Thread {

            private int sleepTime;

            /**
            * O construtor PrintThread atribui o nome a thread
            * chamando o construtor da super classe Thread
            */
            public PrintThread (String nome)
            {
                  super (nome);
                  //adormece durante 0 a5 segundos
                  sleepTime = (int) (Math.random() * 5000);

                  //exibe o nome e o sleepTime
                  System.err.println("Nome: " + getName() + "; sleep: " + sleepTime);

            }

            //controla a execucao da thread
            public void run(){
                  //faz a thread adormecer durante um intervalo de tempo aleatorio
                  try{
                        System.err.println(getName()+ "going to sleep" );
                        //faz a thread adormecer
                        Thread.sleep(sleepTime);

                  }
                  // se a thread interrompeu enquanto estava adormecida,
                  // captura excecao e exibe mensagem de erro
                  catch (InterruptedException interruptedException)
                  {
                        System.err.println(interruptedException.toString());
                  }
                  // imprime o nome da thread
                  System.err.println (getName() + "Done Sleeping");
            }
      }// fim da classe printthread

Bibliografia

[1] Livro Java – Como Programar: H.M. Deitel e P`.J. Deitel 4ª edição Editora Bookman
[2] Notas da aula de Laboratório de Sistemas Operacionais – PUCMINAS – professor Julio Cesar Dillinger Conway


Comentários