Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

Sign in to follow this  
Sergiosaturn

Problemas na classe ThreadPoolExecutor e na classe SynchronousQueue

Recommended Posts

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

Share this post


Link to post
Share on other 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!

Share this post


Link to post
Share on other 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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.