Eu tenho uma função específica que quero ser executada após 5 segundos. Como posso fazer isso em Java?
Encontrei javax.swing.timer, mas não consigo entender como usá-lo. Parece que estou procurando algo muito mais simples do que esta classe fornece.
Por favor, adicione um exemplo simples de uso.
Respostas:
EDITAR:
javadoc diz:
fonte
import java.util.Timer; import java.util.TimerTask;
pode tornar mais óbvio que isso não é verdadejavax.swing.Timer
. / Observe que, se você estiver usando o Swing (e realmente o AWT), não deve fazer nada para alterar os componentes nos segmentos que não são do segmento de distribuição de eventos (EDT) (java.util.Timer
tarefas ruins;javax.swing.Timer
ações boas).cancel
método do timer no final do método de execução limparia o encadeamento de execução das TimerTasks.Algo assim:
Existem vários outros métodos de fábrica nos
Executor
quais você pode usar, se desejar mais threads no pool.E lembre-se, é importante desligar o executor quando terminar. O
shutdown()
método desligará o pool de threads quando a última tarefa for concluída e bloqueará até que isso aconteça.shutdownNow()
encerrará o conjunto de encadeamentos imediatamente.fonte
Exemplo de uso
javax.swing.Timer
Este código será executado apenas uma vez e a execução ocorre em 3000 ms (3 segundos).
Como o camickr menciona, você deve procurar " Como usar temporizadores giratórios " para uma breve introdução.
fonte
Meu código é o seguinte:
fonte
Como uma variação da resposta do @tangens: se você não puder esperar o coletor de lixo limpar seu encadeamento, cancele o cronômetro no final do seu método de execução.
fonte
Timer t
ser declarado,final
pois está sendo acessado dentro de uma classe interna?Sua pergunta original menciona o "Temporizador de oscilação". Se, de fato, sua pergunta está relacionada ao SWing, você deve usar o Swing Timer e NÃO o util.Timer.
Leia a seção do tutorial do Swing em " Como usar temporizadores " para obter mais informações.
fonte
você poderia usar a função Thread.Sleep ()
Sua função será executada após 4 segundos. No entanto, isso pode pausar o programa inteiro ...
fonte
ScheduledThreadPoolExecutor
tem essa capacidade, mas é bastante pesada.Timer
também possui essa capacidade, mas abre vários threads, mesmo se usado apenas uma vez.Aqui está uma implementação simples com um teste (assinatura próxima ao Handler.postDelayed () do Android ):
Teste:
fonte
while
é apenas para ignorar a interrupção.Todos os outros desatadores precisam executar seu código dentro de um novo thread. Em alguns casos de uso simples, você pode esperar um pouco e continuar a execução no mesmo encadeamento / fluxo.
O código abaixo demonstra essa técnica. Lembre-se de que isso é semelhante ao que o java.util.Timer faz sob o capô, mas é mais leve.
Implementação DelayUtil
fonte
fonte