RESOLVIDO - Threads incrementando o mesmo contador

7 respostas
G
// PESSOAL, ESTOU COM A SEGUINTE DIFICULDADE:

public class Principal{

	public static void main(String[] args){
		
		thread t1 = new thread();
		thread t2 = new thread();
		thread t3 = new thread();

		   t1.start();
		   t2.start();
		   t3.start();
	}

}


public class thread extends Thread {

     public void run(){

	     int cont =0;
	     
            //Aqui cada thread realiza seu trabalho, em seguida incrementa seu contador:
	     
	     cont++;
		 
	     System.out.println( "Valor do contador atualizado: " + cont);
	  }
 }

// No resultado apresentado no console cada thread imprime seu contador:

[color=blue]// Valor do contador atualizado: 1
// Valor do contador atualizado: 1
// Valor do contador atualizado: 1[/color]

// [color=red]ENTÃO A DÚVIDA:[/color] COMO FAZER PARA QUE AS TRÊS THREADS ATUALIZEM O MESMO CONTADOR?
// DE MODO A EXIBIR UM RESULTADO ÚNICO, OU SEJA: [color=blue] Valor do contador atualizado: 3[/color]
// Se não for possivel, como faço para somar os três contadores?

Ficarei agradecido pela ajuda !

abrçs !

7 Respostas

Henrique.tenorio

Então, nesse caso é fácil, é só declarar a variável cont como static porque são 3 objetos Thread. Sendo assim todos os 3 objetos poderão acessa-lá (variacel).

public class thread extends Thread {  
     
     private static int cont; //é static
     
      public void run(){     
         System.out.println( "Valor do contador atualizado: " + cont);  
      }  
}

Outro jeito seria modificar seu código para que tivesse somente um destino ou seja um trabalho a ser executado (aquele código dentro do método run). Você criaria 3 trabalhadores (aqueles objetos Thread) como foi feito, e apenas um trabalho (método run). Desta forma os 3 trabalhadores disputariam pelo mesmo trabalho, sem precisar
declarar a variável cont como static.

public class thread extends Thread {  
     
     private int cont; // não static 
     
      public void run(){     
         System.out.println( "Valor do contador atualizado: " + cont);  
      }  
}

no método main:

public static void main(String[] args){  
         
        thread trabalho = new thread();

        thread trabalhador1 = new thread(trabalho);  
        thread trabalhador2 = new thread(trabalho);  
        thread trabalhador3 = new thread(trabalho);  
  
         t1.start();  
         t2.start();  
         t3.start();  
    }
ViniGodoy

Por favor, ao postar tópicos, EVITE USAR SOMENTE LETRAS MAIÚSCULAS NO TÍTULO.
Também não é necessário dizer que está iniciando, se você já está postando no fórum de Java Básico.

Z

Crie uma classe apenas para fazer a contagem.

public class Contador {

	private volatile int contagem; //volatile indica que haverá várias modificações

	public synchronized final int getContagem() { 
		return contagem;
	}

	public synchronized final void incrementa() {
		this.contagem++;
	}
	
}
G

Henrique.tenorio, Zaruck e ViniGodoy[color=red] [/color][size=18] [/size][size=12] [/size]

Só me resta agradecê-los pelas orientações !

Sucesso a todos !!!

Até mais ver !

Master.Abs

Cara só uma dica, no titulo do tópico coloque RESOLVIDO - e a dúvida … Pois assim se alguém tiver a mesma dúvida que você ou similar futuramente pode-se guiar através do titulo do tópico.

Valeu.

G

RESOLVIDO - Threads, Dúvida básica.

G

Master, valeu pela dica !

Criado 1 de fevereiro de 2012
Ultima resposta 2 de fev. de 2012
Respostas 7
Participantes 5