Boa noite, pessoal estou tendo uma certa dificuldade em entender as threads, devido a isto estou uma pesquisando
aqui no forum achei vários tópicos que ajudaram esclarecer alguns conceitos.
No entanto, achei o código abaixo:
public class Thread30 extends Thread{
public void restart(){
startMe();
}
public void startMe() {
synchronized (this) {
notifyAll();
System.out.println("Trying To Notify");
}
}
public void run(){
try{
synchronized (this) {
wait();
System.out.println("Notified");
}
}catch(InterruptedException e){ }
}
public static void main(String[] args) throws InterruptedException{
Thread30 t1 = new Thread30();
t1.start();
t1.restart();
}
}
Entendi que a thread main e thread t1 estão em condição de corrida e caso a main vença só será "Try to notify ".
A minha JVM só permite que a thread main ganhe, fiquei pensado em solução que permitisse que as duas mensagens fossem impressas.
a primeira funcionou:
public static void main(String[] args) throws InterruptedException{
Thread30 t1 = new Thread30();
t1.start();
Thread.sleep(1000);
t1.restart();
}
A segunda eu pensei em usar join sobrecarregado:
public static void main(String[] args) throws InterruptedException{
Thread30 t1 = new Thread30();
t1.start();
t1.join(1000);
t1.restart();
}
Pelo o que o entendi do join ele iria anexar a thread main no final da thread t1 assim que t1 acabasse sua execução o main continuaria.
Neste caso a thread main esperaria 1 segundo para que completasse sua execução, mas o programa trava e não imprime nada.
Eu agradeço as explicações.