[code] // 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);
}
}[/code]
// 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?
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).
[code]public class thread extends Thread {
private static int cont; //é static
public void run(){
System.out.println( "Valor do contador atualizado: " + cont);
}
} [/code]
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.
[code]public class thread extends Thread {
private int cont; // não static
public void run(){
System.out.println( "Valor do contador atualizado: " + cont);
}
} [/code]
no método main:
[code]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();
} [/code]
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.
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++;
}
}
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.