Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sergiosaturn

Problemas na classe ThreadPoolExecutor e na classe SynchronousQueue

Mensagens Recomendadas

Sergiosaturn

Saudações programadores.

Eu estou neste momento a desenvolver um projecto em java em que vou necessitar de usar a classe ThreadPoolExecutor em conjunto com a classe  SynchronousQueue. Para aprender como melhor funciona este mecanismo eu escrevi o seguinte codigo.

package Processo;

import java.util.concurrent.*;

public class Principal {

    public static void main(String args[]) {

        //try {
            
        System.out.println("Bem vindo ao sistema de gestao de threads");

        SynchronousQueue<Runnable> sq = new SynchronousQueue<Runnable>();

        ThreadTeste r = new ThreadTeste();
                
        sq.offer(r);

        System.out.println("Tamanho de queue ---->" + sq.size());
        
        ThreadPoolExecutor exec = new ThreadPoolExecutor(5, 10, 40, TimeUnit.SECONDS, sq);

        System.out.println("Numero de threads na piscina ---->" + exec.getPoolSize());

        System.out.println("Numero de threads activas ---->" + exec.getActiveCount());

        exec.prestartAllCoreThreads();

        System.out.println("Numero de threads activas ---->" + exec.getActiveCount());
               //exec.shutdown();
//}
        /*
        catch(Exception e ) { 
            System.out.println(e.getMessage());
        } */

        
    }

}

package Processo;


public class ThreadTeste implements Runnable{

    private boolean b;

    public ThreadTeste() {

        this.b = true;

    }

    @Override
    public void run() {

        while(b == true) {

            System.out.println("Estou aqui");

        }

    }

}

Ao executar o debug e após plantar aolhuns printlns conclui que o meu objecto de tipo ThreadTeste nao é inserido no meu objecto de tipo  SynchronousQueue. Tentei investigar ne net e nao encontrei a razao porque isto acontece. Em vez do metodo offer , ja usei o metodo add e o metodo put e continuou a nao resultar.

Se alguem que tem alguma experiencia no uso destas classe e ja passou por algum problema semelhante , souber qual é o erro por favor diga-me.

Obrigado

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
magician

Por acaso nunca usei o SynchronousQueue, julgo que que funcionamento da SynchronousQueue é mesmo esse e não exactamente o que lhe queres dar. Pelo que li ao alto serve para colocar Threads já em execução de forma a ficarem em espera até que outra Thread a retire.


I haven’t lost my mind; it’s backed up on DVD somewhere!

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Sergiosaturn

Saudações.

Obrigado pela resposta rapida.

Agora se me permites poderias tirar uma duvida que agora me surgiu.

No projecto que eu referi anteriormente no projecto que eu tenho de desenvolver , eu tenho de fazer uma aplicação cliente-servidor que tem de fazer operações em uma base de dados SQL.

A parte do sql ja consegui desenvolver e  o meu codigo do servidor funciona apenas com um cliente. No entanto agora eu queria melhorar o meu codigo, agora eu queria ter a possibilidade de varios cliente poderem trabalhar com o meu servidor.

Achas que pela tua experiencia o ThreadPool serve para resolver este problema?

Obrigado.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.