Timer x Runnable x Swing Worker

Qual a melhor maneira, ou se são maneiras diferentes, de trabalhar com Threads em java. Ja estou ficando louco pois pelo que entendo eu posso trabalhar de 3 maneiras:

1 - Com a interface Runnable- Implementando o método run()
2 - Usando o bean timer
3 - Usando a Classe Swing Worker.

Abraços!!

Hmmm…vc está confundindo as coisas. Esquenta não, é normal.

Essa é uma ferramenta do swing para separação de threads: uma para a interface gráfica, e outra para o processamento.

Esse é o que vc deveria estudar primeiro. É parte do processo de construção de threads em qualquer sistema.

Esse ai…hmmmm, tbm não sei.

Se vc já souber o conceito de threads, estude como implementá-las em java. E se o seu sistema for swing, estude em seguida o SwingWorker :wink:

E depois que você aprendeu a mexer com threads (ou seja, implementando Runnable), esqueça tudo e aprenda a usar java.util.concurrent.

Eu digo que a manipulação “bruta” de threads (com wait e notify) é como “goto” - não deveria ser permitida pela linguagem. Mas…

[quote=xxMAGRAOxx]Qual a melhor maneira, ou se são maneiras diferentes, de trabalhar com Threads em java. Ja estou ficando louco pois pelo que entendo eu posso trabalhar de 3 maneiras:

1 - Com a interface Runnable- Implementando o método run()
2 - Usando o bean timer
3 - Usando a Classe Swing Worker.

[/quote]

Threads não é coisa simples.
O primeiro a estudar é o objeto Thread. É preciso entender o que é, o conceito que ele representa. Depois é preciso nunca usá-lo a menos que vc saiba o que está fazendo.
A interface Runnable (assim como Callable e Future) são importantes no contexto the threads, Elas permitem isolar o que vc quer fazer do onde e como vc quer fazer.
O TImer usa threads por baixo dos panos, mais isso é irrelevante. O que importa aqui é que o timer só roda num ceto horário ou numa certa frequencia que vc estipula. Ele usa um Runnable para vc dizer o quer correr naquele horario.
O SwingWorker como já disseram serve para executar threads em background e não interferir com a thread principal do swing. Se vc não usar swingworker sua UI vai travar. Esta classe só é relevante se o seu sistema é swing e apenas é relevante para comandos dados pela UI (botões e menus,por exemplo).

Hoje em dia existe um conjunto melhor de ferramentas. O ExecutorService é uma serviço para rodar coisas. Ele esconde todo o problema das threads e é muito simples de usar se vc entende o que é runnable, callable e future.
O ScheduleExecutorService substitui o Timer e é usado para executar coisas no tempo. Temos ainda o Fork/Join que é um framework que abstrai completamente o uso de threads e permite executar algoritmos em paralelo. Por baixo dos panos usa uma nova implementação de executor chamada ForkHJOinExecutor.

Isto é para dizer que embora seja muito importante conhecer a classe e o conceito de thread e tudo o que está envolvido com ele ( como ThreadLocal, e InheritThreadLocal, runnable, etc…) hoje não é para usar esses construtos mais, porque são muito baixo nível e complexos. É melhor confiar em API de mais alto nivel que são mais simples de entender e usar.

Valeu pela participação galera. Resolvi usar duas Runnables mesmo em um projeto meu.
Uma para fazer uam extração dos registros do banco para um TXT e outra para exibir um JDialog com um contador de tempo e registros que foram gravados dinamicamente.
Até agora nenhum problema grave , como travamentos e etc. Mas estudarei mais a fundo esse conceito que pelo visto é extremamente importante.

Abraços

[quote=xxMAGRAOxx]Valeu pela participação galera. Resolvi usar duas Runnables mesmo em um projeto meu.
Uma para fazer uam extração dos registros do banco para um TXT e outra para exibir um JDialog com um contador de tempo e registros que foram gravados dinamicamente.
Até agora nenhum problema grave , como travamentos e etc. Mas estudarei mais a fundo esse conceito que pelo visto é extremamente importante.
[/quote]

Se vc tem uma thread que vai interagir com o swing vc precisa dar uma ollhada no SwingUtilities.invokeLater() que é o outro lado do espelho em relação ao SwingWorker