Ir ao conteúdo

Posts recomendados

Postado
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

 

 

Postado

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.

  • mês depois...
Postado

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

Postado

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.

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...