Classes ativas

Tava olhando por esse grande universo java… E vi muita gente fazendo classes ativas herdar de Thread.

A galera tem feito por exemplo: tenho um gerador de relatorio programado então eu faço esse gerador herdar de Thread! Só que ai tu não esta misturando a responsabilidade do gerador de relatorio com as das Threads!

Eu acho isso meio feio, pois para mim quando eu faço algo herdar de Thread para ter um boa responsabilidade esta deveria ser uma thread com umas firulas a mais.

Agora no caso sitado acima eu acharia melhor o gerador de relatorio ter uma thread e não ser uma thread.

O que vcs acham??

[]s

Olá

Apesar de ser possível fazer uma classe extender a classe Thread, o mais comum é a classe que usa Thread implementar a interface Runnable.

[]s
Luca

Nada deve herdar de Thread.
Se alguém deseja criar uma thread, criar um método em sua classe e fazê-la implementar Runnable.

Concordo com vcs plenamente que nada deve herdar de thread a não ser que vc queira criar um tipo de thread diferente, mas vcs não acham que uma justificativa para isso não seria divisão de responsabilidade?

Olás,

Eu acredito que existam alguns casos especiais em que pode ser vantajoso criar uma subclasse de Thread. Os casos em que mais sinto essa necessidade são aqueles em que desejo implementar uma política de cancelamento não-padrão, exemplo:


public class ConnectionHandler extends Thread{

   public void run(){
      try{
         while(true){
            socket.read();
            // processa coisas
         }
      }catch (IOException ex) {
         if(isInterrupted()){
            Thread.interrupt();
            return;
         }else{ // trata erro }
      }

   public void interrupt(){
      try{
         socket.close();
      }catch(IOException ex) { 
      }finally{
         super.interrupt();
      }
   }
}

Isso fica fácil de usar corretamente tanto de forma “avulsa” quanto dentro de um java.util.concurrent.Executor.

Abracos,

Giuliano