No código original da correção, a ordem de impressão era assumida incorretamente. Além disso, os laços for não incluíam o 100 e o 200. Segue o código ajustado:
package med.voll.api.testes.memoria;
public class TestaString { public static void main(String[] args) throws InterruptedException { StringBuffer resultado = new StringBuffer();
var thread1 = new Thread(()->
{
for(int i = 1; i<=100; i++){
resultado.append(i);
resultado.append(" ");
}
});
var thread2 = new Thread(()->
{
for(int i = 101; i<=200; i++){
resultado.append(i);
resultado.append(" ");
}
});
thread1.start();
thread1.join(); // aguarda thread1 terminar
thread2.start();
thread2.join();
System.out.println(resultado);
}
}
Lógica: Corrige os limites dos loops para incluir os extremos.
Concorrência controlada: thread1.start(); thread1.join(); garante que a thread1 finalize antes de thread2 iniciar.
Isso garante que os números de 1 a 100 sejam sempre adicionados antes dos de 101 a 200.
Segurança de dados: O uso de StringBuffer, que é thread-safe, previne problemas de concorrência caso as threads sejam executadas simultaneamente, embora neste código elas rodem de forma sequencial.
Quando as threads são executadas simultaneamente, há potencial ganho de desempenho e, com StringBuffer, a integridade dos dados compartilhados é garantida; porém, a ordem da saída concatenada não é garantida.