(Resolvido) Threads e Runnable em java ( Como implementar )

Bom dia, galera estou implementando o conceito de threads em um sistema pronto que já terminei , porém estou tendo dificuldades no entendimento e na implementação, bom achei essa linha de codigo aqui, alguém pode me explicar este codigo e como e aonde implementar…

public void start() {
if (tempo == null) {
tempo = new Thread(this, “Clock”);
tempo.start();
}

}
 public void run() {
    Thread novaThread = Thread.currentThread();
    while (tempo == novaThread) {
        repaint();
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e){ }
    }
}

Bom dia Jadson, com a chegada do java 8 vieram também as expressões lambdas, elas facilitam e simplificam muito a implementação de threads aconselho que dê uma estudada.

Este fonte que você postou é dividido em duas partes, a primeira parte é o método start(), o método start é como o main das threads, neste caso o método start irá instanciar uma nova thread e chamará o método start padrão das threads. O método start procura o método run da thread e executa o mesmo. O método currentThread retorna a thread atual, o método repaint atualizará a o frame que a thread tá rodando, e o setSleep setará o tempo que a thread deve executar cada iteração.

1 curtida

Jadson,

Dá uma lida nesse material… (bem rapido e objetivo) e depois avalia teu código novamente… certamente você irá entender tudo que foi feito ali… e vai poder trabalhar com Threads numa boa. :wink:

https://www.caelum.com.br/apostila-java-orientacao-objetos/programacao-concorrente-e-threads/#17-1-threads

1 curtida

Muito obrigado mesmo, me ajudou com sua resposta curta e objetiva , muito obrigado , mais no caso da implementação em um sistema em um projeto já pronto, com metodos já pronto, aonde devo inserir este codigo? eu já coloquei a interface RUNNABLE, mais o codigo coloco aonde? antes ? depois? dos metodos ?

Se você está tentando atualizar a interface gráfica a partir de uma outra thread que não seja o EventDispatcher já adianto que você está fazendo errado. Se a sua intenção é atualizar o desenho de um relógio a cada segundo, por exemplo, então a maneira correta de fazer é instanciar um Timer, ajustar o delay e registrar um EventListener apropriado:

https://docs.oracle.com/javase/8/docs/api/javax/swing/Timer.html

orbigado

não amigo, eu peguei esse codigo pronto na internet e queria entender o que o codigo está fazendo, então vinnicius me explicou porém eu já estou com um projeto pronto funcionando porem não sei aonde e como implementar o conceito de threads

Você pode implementar threads para chamada de métodos de forma assíncrona, métodos anônimos, geração de telas independentes. Como eu não sei o que exatamente seu código faz, precisaria ver se realmente é necessário criar threads, e se for usar threads é bom dá uma estudada em lambda, pois agiliza muito o trabalho e abstrai bastante coisa, reduzindo o tempo e tamanho do trabalho.

Bom vinicius mais uma vez obrigado, bom eu nao posso mostrar o codigo pois é corporativo da empresa de onde eu estou estagiando, mais basicamente ele funcionar como um gerador de relatorios ele pega a data em que o arquivo foi modificado no banco da empresa, e existe os metodos onde pegar essas informações, porem o programa esta lento quando executar a função de puxar os dados, dai quero implementar o conceito de threads.

Se está acontecendo lentidão na hora de carregar os dados do banco de dados, então threads não vão te ajudar. Threads só ajudam quando a tarefa é paralelizável, e carga de dados não é. Recomendo você estudar melhor a sua query e verificar o plano de execução no banco de dados pra ver se os índices são usados corretamente.

1 curtida