Caraca dei tilte numa parada sobre threads. Olhem esse código:
package avancado.threads;
import common.Console;
public class Threads {
public static void main(String[] args) {
Runnable geradorDeUm = new GeradorDeBits(true);
Runnable geradorDeZero = new GeradorDeBits(false);
Thread threadUm = new Thread(geradorDeUm);
Thread threadZero = new Thread(geradorDeZero);
threadUm.start();
threadZero.start();
}
}
class GeradorDeBits implements Runnable {
private boolean bit;
public GeradorDeBits(boolean bit) {
this.bit = bit;
}
public void run() {
for (int i = 0; i < 400; i++) {
comeAlfafa();
Console.prints(bit? 1 : 0);
}
}
private void comeAlfafa(){
for (int i = 0; i < 10000; i++)
Console.prints("");
}
}
// Uma das saídas:
// 000000000000000000000000000111111111111111100000000000000000000000000000
// 000111111111000000000011111111111111111111110000000000001111111111100000
// 000000011111111111111111111111111110000011111111111111111111000000000000
// 011111111111111111100000000000111111111111111111111000000000001111111111
// 000000000000111111111111000000000011111111111111111111111000000000000011
// 111111111111111111111111111111111000000000000000000001111111111111111111
// 111100000000000011111111111111111111111000000000000000000000011111111111
// 000000000000000000000001111111111111111000000000000011111111111111110000
// 000000000000000000111111111111000000000000000000000000011111111111110000
// 000000001111111111111111111111111111000000000000000000000011111111111100
// 000000000111111111111111111111000000000000000000000000000000000000000000
// 00000000
Minha dúvida cruel é: quando eu começo as duas threads, e os zeros e uns não saem contínuos na tela, o que acontece?
A) A JVM fica alternando a execução das threads, como se fosse um “yield() involuntário”
C) As duas threads rodam “ao mesmo tempo” e a saída é resultado da “reação” do System.out (Console) às threads…
C) Ambas as respostas
D) Tá maluco rapá!
???
Outra dúvida: existe alguma objeção em eu sincronizar o Runnable.run(), ou isso não tem o menor sentido (estou em estado de tilte heheh)???

