Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Dúvida - Thread

Pessoal, eu fiz conforme o exercício mas, fiquei com dúvida no resultado.

Quando eu rodo a aplicação, ela alterna entres as threads, blz até ai eu entendi. Mas, no caso as thread não começam a ser exibidas desde o início, elas começam a ser exibidas quando for já está na metade para frente


public class Programa implements Runnable{
    private int id;

    public void setId(int id){
        this.id = id;
    }

    public int getId(){
        return this.id;
    }

    @Override
    public void run() {
        for(int i = 0; i < 10000; i++){
            System.out.println("Programa " + id + "valor: " + i);
        }
    }


}

public class Exercicio1 {
    public static void main(String[] args) {
        Programa p1 = new Programa();
        p1.setId(1);    

        Thread t1 = new Thread(p1);
        t1.start();

        Programa p2 = new Programa();
        p2.setId(2);

        Thread t2 = new Thread(p2);
        t2.start();
    }
}

Resultado:

Programa 1valor: 9018
Programa 1valor: 9019
Programa 1valor: 9020
Programa 1valor: 9021
Programa 1valor: 9022
Programa 2valor: 6759
Programa 2valor: 6760
Programa 2valor: 6761
Programa 2valor: 6762
Programa 2valor: 6763
...
3 respostas

O console não suporta exibir tantas linhas. Por isto,as linhas anteriores estão sendo apagadas, dando a impressão que o programa está exibindo somente uma parte dos números.

Altere o código para

   System.out.print("Programa " + id + " valor: " + i + " / ");

E você verá todos os números.

O "print" não quebra linhas.

solução!

Você também pode melhorar o código para visualizar melhor o resultado.

 @Override
    public void run() {
        int contador = 0; // Define um contador de linhas
        for(int i = 0; i < 1000; i++){
            contador++; // Aumenta em uma unidade o valor de contador
            System.out.print("PG " + id + " VL: " + i + " - ");
            if ( contador == 100 ) { // Quando o contador chegar em 100, será zerado e uma quebra de linha será inserida
                contador = 0;
                System.out.println();
               }
        }
    }

Era isso mesmo Gabriel. Eu fiz da outra forma que vc mostrou e ficou mais legível.

Muito obrigado pela atenção!!