Thread class com join para escrever ABC

1 resposta
F

Olá a todos!

Preciso de uma ajuda para criar um programa que imprima ABC usando 3 threads, cada thread escrevendo uma letra. Tem que imprimir na ordem ABC sempre.

Aguns detalhes, o programa principal só pode criar os objetos e dar o start neles, e não pode usar sleep, tem que ser o join. E o join não pode estar dentro do programa principal.

Fiz o seguinte:

public class Escrever extends Thread
{

  private String letra;
  
   public Escrever(String letra)
   {
          this.letra = letra;
   }
  
   @Override
   public void run ()
   {     
          try
          {
                 if ( letra == "A")
                 {
                       this.join(100);
                       System.out.print(letra);
                 }
                 else if ( letra == "B")
                 {
                       this.join(200);
                       System.out.print(letra);
                 }
                 else if ( letra == "C")
                 {
                       this.join(300);
                       System.out.print(letra);
                 }
          }
          catch (InterruptedException ie)
          {
                 ie.printStackTrace();
          }
     }
}

public class TestaEscrever {
   public static void main(String[] args) 
   {
       Escrever letra1 = new Escrever("A");
       Escrever letra2 = new Escrever("B");
       Escrever letra3 = new Escrever("C");
    
       letra1.start();
       letra2.start();
       letra3.start();
   }
}

Os codigos acima escrevem ABC sempre, mais o professor disse que está errada, não pode ser implementado assim passando os parametros para o metodo join.

Alguém teria uma ideia de como posso implementar da maneira correta ? Lembrando que tem que ser usando join, e não pode suar join dentro do programa principal.

Obrigado,
Filipe

1 Resposta

A

A classe que você criou tem 1 Thread para imprimir as letras e o seu professor quer três.

Assista até a aula 96.
Eis a 93.

Depois de uma olhada aqui:

<aside class="quote" data-post="1" data-topic="218297">
  <div class="title">
    <div class="quote-controls"></div>
    <img alt="" width="20" height="20" src="/user_avatar/www.guj.com.br/brunorota/40/26621_1.png" class="avatar">
    <a href="/t/metodo-join-da-classe-thread-resolvido/218297?source_topic_id=353529">Método join() da classe Thread [RESOLVIDO]</a> <a class="badge-wrapper  bullet" href="/c/programacao/java">Java</a>
  </div>
  <blockquote>
    Olá galera 

Estou com uma seguinte dúvida 

Quando eu chamo em um código new Thread().start() e logo em seguinda new Thread().join() eu forço a thread que está rodando no momento executar a thread que eu iniciei até o final? 

exemplo  

 public class Teste {
	public static void main(String args[]){
		Thread t = new Thread(new Teste().new MyThread());
		System.out.println("Olá");
		t.start();
		try{
			t.join();
		}catch(Exception e){
		}
		for(int i=0; i<1000; i++)
			System.out.println("Olá2"
  </blockquote>
</aside>

Não sei se vai ajudar, mas para ter uma noção do efeito, tente entender as seguintes instruções:

System.out.println("Em espera "+Thread.currentThread().getName());
Thread.currentThread().join(1345);//remova o 1345, coloquei só pra avaliação
Criado 9 de agosto de 2017
Ultima resposta 10 de ago. de 2017
Respostas 1
Participantes 2