Этот пример добавляет случайное число в очередь блокировки каждые две минуты. Вы можете взять номера из очереди, когда они вам нужны. Вы можете использовать java.util.Timer в качестве упрощенного средства для планирования генерации чисел или использовать java.util.concurrent.ScheduledExecutorService для более универсального решения, если в будущем вам потребуется больше изощренности. Записывая номера в очередь, вы получаете единый интерфейс для получения номеров из обоих средств.
Сначала мы настроили очередь блокировки:
final BlockingDequeue<Integer> queue = new LinkedBlockingDequeue<Integer>();
Вот настройка с помощью java.utilTimer:
TimerTask task = new TimerTask() {
public void run() {
queue.put(Math.round(Math.random() * 99));
// or use whatever method you chose to generate the number...
}
};
Timer timer = new Timer(true)Timer();
timer.schedule(task, 0, 120000);
Это настройка с помощью java.util.concurrent.ScheduledExecutorService
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
Runnable task = new Runnable() {
public void run() {
queue.put(Math.round(Math.random() * 99));
// or use whatever method you chose to generate the number...
}
};
scheduler.scheduleAtFixedRate(task, 0, 120, SECONDS);
Теперь вы можете получать новое случайное число из очереди каждые две минуты. Очередь будет блокироваться, пока не станет доступен новый номер ...
int numbers = 100;
for (int i = 0; i < numbers; i++) {
Inetger rand = queue.remove();
System.out.println("new random number: " + rand);
}
Как только вы закончите, вы можете прекратить работу планировщика. Если вы использовали таймер, просто сделайте
timer.cancel();
Если вы использовали ScheduledExecutorService, вы можете сделать
scheduler.shutdown();