Olá Fernando, blz?
Acho que entendi o que está errado.
O sysout a que você se refere no início :
System.out.print("Programa " + id + " valor: " + i + " / ");
É de um exercício que tem por teste o seguinte main:
public class TestaPrograma {
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();
}
}
Já este outro código que você postou no comentário se refere a um exercício diferente, onde o resultado é algo assim:
Iniciado sequencia de 0 a 10000
Iniciado sequencia de 10000 a 20000
Iniciado sequencia de 20000 a 30000
Threads produtoras de mensagens finalizadas!
Fim da execucao com sucesso
Assumindo que sua dúvida foi no exercício que tem este seu sysout da postagem, ao executar diversas vezes, você notará que o resultado no console nunca é igual, e se observar bem conforme os prints vão ocorrendo, você verá tanto Programa 1 como Programa 2, o problema é que a View Console tem um tamanho máximo de output que consegue guardar, e ai quando chega no limite vai sumindo o mais antigo, por isso que nesse caso você as vezes executa e quando rola toda a barra de rolagem, vê apenas Programa 1 ou Programa 2 (isso apenas significa que próximo do fim da execução a thread que faltava exibir valores e foi executando até terminar lotou a visualização do Console apenas com os prints dela, mas basta executar várias vezes que eventualmente verá algo assim:
Programa 2 valor: 9997
Programa 2 valor: 9998
Programa 2 valor: 9999
Programa 1 valor: 6702
Programa 1 valor: 6703
Programa 1 valor: 6704
Programa 1 valor: 6705
Programa 1 valor: 6706
Programa 1 valor: 6707
Ou seja, o que está ocorrendo de fato, é que o processador executa um pouco da primeira thread, printando Programa 1..., ai ele executa um pouco da segunda printando Programa 2... e assim vai paralelamente, até que chega um momento em que uma das threads terminou, e a outra ainda tem um poquinho mais para printar, e por vezes a quantidade de prints desta última lota o console. Rode várias vezes e procure que verá esse padrão que citei acima em algum momento.
Para finalizar, pode-se configurar o tamanho máximo de caracteres da View Console do Eclipse para caber mais texto, indo em Window -> Preferences -> Run/Debug -> Console. Aí basta alterar o campo Console buffer size e salvar.
Pode-se também deixar ele ilimitado, desmarcando a opção Limit console output.
Abraços.