[Não resolvido] Como implementar pool ilimitado de threads?

Olá galera,

tentei substituir o código da classe ServerTerminal, aonde tem as instâncias de 5 threads, por um pool de threads, utilizando o newCachedThreadPool(), no entanto só dá certo com o 1º terminal do cliente que conectar.

Aí eu tinha substituído as instâncias das 5 threads abaixo por esse código aqui

    ServerTerminal t = new ServerTerminal();
    ExecutorService executor = Executors.newCachedThreadPool();
    executor.execute(t);

Alguém sabe a solução para que fique um pool ilimitado de threads?

public class ServerTerminal extends Thread {

    public void run() {
        try {
            IServiceManagerServerFactory factory = Service.createServiceManagerServerFactory();
            IServiceManagerServer manager = factory.createServiceManagerServer();

            manager.conectarAoServidor();
            System.out.println("Nova conexao com o cliente.");
            ListenRequestRunnable t = new ListenRequestRunnable(manager);
            t.start();
            ResponseRequestRunnable t2 = new ResponseRequestRunnable(manager);
            t2.start();

        } catch (InvalidConnectionPort p) {
            System.out.println(p.getMessage());
        } catch (ClosedServerConnectionException csce) {
            System.out.println(csce.getMessage());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        try {

            Thread.currentThread().setName("main");
            ServerTerminal t = new ServerTerminal();
            ServerTerminal t2 = new ServerTerminal();
            ServerTerminal t3 = new ServerTerminal();
            ServerTerminal t4 = new ServerTerminal();
            ServerTerminal t5 = new ServerTerminal();
            t.setName("t1");t2.setName("t2");t3.setName("t3"); t.start();t2.start();t3.start();t4.start();t5.start();

        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

usa uma collection

http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html
Leia a documentação e passe os parâmetros adequados ao construtor.

[quote=entanglement]http://download.oracle.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html
Leia a documentação e passe os parâmetros adequados ao construtor.
[/quote]

Mas que parâmetros se o newCachedThreadPool não aceita parâmetros no construtor? Quem aceita parâmetro é o newFixedThreadPool, que nesse caso não serve, por usar um número fixo de threads.

Você não leu direito? newCachedThreadPool é ilimitado. Entretanto, ele reusa threads caso necessário.

Disso eu já sabia, só não sei que raio de parâmetro é esse que vc falou.

Moderador pode fechar o tópico, ninguém ajuda mesmo!

1 - Você não leu o link com atenção passado pelo entanglement

2 - Tem coragem de reclamar que ninguém ajuda, o que dá a entender que tens pressa. Se é isso, pague alguém para fazer por você.

Eu fiz uma busca de dois minutos e li o link, e veja só: newCachedThreadPool(ThreadFactory threadFactory)

Achei um método que passa no construtor um parametro para o newCachedThreadPool. Que milagre!
Mas enfim, já que ninguém ajuda…o jeito é tu gastar fosfato, estudar e pesquisar sobre sua necessidade campeão.

Costumo usar desta forma, assim as threads ficam com um nome identificável.

Nao se esqueca que as threads somente serao reutilizadas se o metodo run retornar. Nao adianta mante-las num loop eterno…

Executors.newCachedThreadPool(new ThreadFactory() {
  @Override
  public Thread newThread(Runnable r) {
    Thread thread = new Thread(r, r.getClass().getSimpleName());
    thread.setDaemon(true);
    return thread;
    }
  });