2015-03-21 2 views
0

Мне было интересно, если бы существовала форма таймера, которую я могу использовать, чтобы не останавливать весь мой код Thread.sleep(ms), это не то, что мне нужно, потому что он приостанавливает весь мой код.Таймер в Java, который не приостанавливает программу?

EDIT: Хорошо, я думаю, что я неправильно сформулировал это. Вот мое редактирование: Есть ли способ измерить определенное количество времени в Java без приостановки моего метода main?

+0

см. Http://docs.oracle.com/javase/7/docs/api/java/util/Timer.html и http://docs.oracle.com/javase/tutorial/uiswing/misc/timer. html – SemperAmbroscus

+0

Что вы пытаетесь сделать ??? – nom

ответ

0

В зависимости от того, какие рамки вы используете. Довольно общий способ - начать новый Thread, приостановить этот поток через Thread.sleep (ms), а затем делать все, что вы хотите сделать после этой задержки, но, конечно, это требует немного заботы из-за проблем с параллелизмом.

+0

Я уверен, что у java есть встроенный таймер api – SemperAmbroscus

+0

Вы правы, конечно, есть, java.util.Timer, например. –

+0

Но, есть ли что-то, что может измерить время без приостановки программы? –

1

Мне нравится использовать Executors класс. У этого есть хороший метод, который является newScheduledThreadPool. Это дает вам пример ScheduledExecutorService, который имеет множество методов планирования.

Посмотрите здесь здесь: http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html

ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); 
scheduler.schedule(threadToExecute, 10, TimeUnit.SECONDS); 

Этот код начнет threadToExecute thread после 10 секунд, не останавливая основной поток.

+0

TimeUnit не является классом, который можно импортировать. –

+0

Я не понял. 'import java.util.concurrent.TimeUnit;' –

+0

Спасибо. Control + Shift + O не работает. Кроме того, что такое threadToExecute? Не могли бы вы привести пример. –

0

Возможно, вы захотите изучить класс Timer. Вы можете прикреплять его к потоку, планировать события и добавлять задержки. Что вы могли бы сделать с этим, вы могли бы создать поток, который будет работать вдоль вашего основного потока и запустить его оттуда. Поскольку они будут на двух совершенно разных потоках, вам не нужно беспокоиться о том, что они мешают друг другу. Чтобы запустить другой поток, вы можете создать класс, который расширяет Thread и запускает его. Затем используйте конструктор Timer(String name) для создания таймера для потока.

Смежные вопросы