Ir ao conteúdo
  • Cadastre-se

Java Alguém pode ajudar nesse exercício?


Posts recomendados

Citação

 

class MinhaThread extends Thread {
    private String mensagem;

    public MinhaThread(String mensagem) {
        this.mensagem = mensagem;
    }

    public void run() {
        for (int i = 0; i < 10; i++) {
            System.out.println(mensagem);
        }
    }
}

class Main {
    public static void main(String[] args) throws Exception {
        Thread a = new MinhaThread("A");
        Thread b = new MinhaThread("B");
        Thread c = new MinhaThread("C");
        a.start();
        a.join();
        b.start();
        b.join();
        c.start();
        c.join();
    }
}

O que irá surgir na tela? O resultado apresentado será sempre igual ou pode haver variação? Por que?

Citação

 

 

Link para o comentário
Compartilhar em outros sites

Primeiro, as funções start() e join() não fazem parte da classe MinhaThread, então você podia mostrar a classe Thread.

 

Segundo, a Run() da classe MinhaThread não está ligada à duas funções da classe Thread, então como vai aparecer essas mensagens no console?

 

Por fim, ao invés de colocar a start() e join(), você podia ter colocado tipo "objeto.run()", já que é a única função que precisa ser aproveitada. Nesse caso, vai aparecer 10 vezes a mensagem de cada objeto da classe, em uma ordem. O resultado pode haver variação, já que apresenta as mensagens diferentes de cada objeto da classe, sendo elas A, B e C.

Link para o comentário
Compartilhar em outros sites

  • mês depois...

Não sei se já resolveu, mas vamos lá, primeiramente pelo que vi, ele criou um classe chamada minha MinhaThread e deu um extends em Thread que já é uma classe interna do java (geralmente se utiliza Thread para que tenha mais de um processo sendo executado ao mesmo tempo ou paralelamente), criou uma variável mensagem e criou um construtor de MinhaThread para ser passada a mensagem através desse construtor já que a mensagem é privada, logo depois fez a implementação do método run, Obs: Quando ele deu extends no Thread essa classe automaticamente passa a ter os métodos, start e join, o método start inicia o uma thread que no caso é um run, toda vez que se chama o start ele procura o metodo run, por isso dele implementar esse metodo run, que no caso é a ação, nesse caso a ação é imprimir a mensagem passada 10x atraves do for ali. Depois ele parte para a classe principal onde cria 3 objetos (a,b,c) do tipo MinhaThread e passa como argumento de mensagem em cada objeto A, B, C, ou seja no objeto 'a' a mensagem vai ser A, no objeto 'b' vai ser B e no objeto 'c' vai ser C. Logo ele chamada os metodos a start(), esse metodo incia o metodo run, e depois ele chama o metodo join(), esse metodo join é chamado para que o programa espere o run do primeiro objeto terminar para depois chamar os outros. 

 

Agora sobre sua resposta: Ele vai imprimir na tela essa sequencia: A A A A A A A A A A B B B B B B B B B B C C C C C C C C C C. Ou seja ele ira imprimir na tela A (10x) e B (10x) e C (10x), como ele colocou um join() entre a chamada as threads significa que a próxima thread só é executada quando a em execução terminar o serviço.

 

Caso queira dar uma olhada sobre Thread: https://www.javatpoint.com/creating-thread

 

A teste de curiosidade executel as classes, segue:

MinhaThread.java
MinhaThread.png.304a3a670eb788cd522b72efcd4b2b06.png

 

Main.java

Obs: Tive que colocar um try catch no metodo join se não ele não deixava compilar o código, isso é apenas para caso dê erro, ele mostrar uma mensagem.

 

Main.png.e6fc59c367ff272d305985cab7b74e87.png

 

Resultado:

 

Resultado.png.3ba189184144168d930cbefa8c9ce653.png

Link para o comentário
Compartilhar em outros sites

Em caso de dúvidas, sempre recorra à documentação oficial. Segue a documentação da classe Thread.

 

Como podemos ver, a classe Thread possui os métodos start() e join(). Além disso, ela implementa a interface Runnable, logo, implicitamente, ela possui o método run().

 

Quando a classe MinhaThread estende a classe Thread, MinhaThread herda todos esses métodos (além outros), ou seja, MinhaThread passa a possuir esses métodos também. Esse é o funcionamento de herança no Java.

 

O método start() faz com que o método run() seja executado em modo paralelo à thread principal do programa. Já o método join() faz com que a thread que o chamou espere a conclusão do método run().

 

Na classe principal, é chamado o método join() logo na sequência do método start(), isso causa o mesmo efeito de se chamar o método run() diretamente.

 

Esse código não faz sentido ter sido escrito dessa forma, logo está claro que se trata de uma questão de atividade, e foi feito assim para confundir a cabeça do aluno.

Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...