Работа с единицами времени в java

Я строю простую базовую модель агента в Anylogic. Я хочу осуществить голод для агентов. У агента есть параметр hunger. Я хочу устанавливать hunger +1 с каждым часом. Полагаю, это нужно делать с циклом, но я не знаю, с чего начать. Может ли кто-нибудь помочь мне построить цикл?


person T.Nosek    schedule 19.07.2017    source источник


Ответы (2)


Это одно из решений, однако оно не учитывает время, необходимое для выполнения метода run ().

    public class HourRun implements Runnable {
        private final ScheduledExecutorService scheduler 
                                  = Executors.newScheduledThreadPool(1);
        int period = 1;
        int delay = 0;
        TimeUnit timeUnit = TimeUnit.HOURS;
        ScheduledFuture scheduledFuture;

        public HourRun() {
         scheduledFuture = scheduler.scheduleAtFixedRate(this,
                    period, delay, timeUnit);
        }


        @Override
         public void run() {
            // This will be called every hour.
         }
    }

Если вы хотите, чтобы между завершением метода run () прошел один час, используйте это вместо этого в конструкторе.

    int initialDelay = 0;
    scheduler.scheduleWithFixedDelay(this, initialDelay, delay, timeUnit)

Это будет ждать 1 час между всеми операциями, вызовами, которые выполняются в вашем методе run (), а затем вызвать его снова. Я не уверен, что вы этого хотели. Может так проще?

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                TimeUnit.HOURS.sleep(1);
            } catch (InterruptedException e) {
                // Code here
            }
        }
    }).start();

Это запустит все, что вы хотите, в отдельном потоке, который большую часть времени будет спать. Удачи, надеюсь, я смогу вам чем-то помочь.

person Ludvig W    schedule 19.07.2017
comment
Это было бы отличным решением. Однако я узнал, что у anylogic есть функции планировщика, которые вы можете просто настроить в API :-) - person T.Nosek; 19.07.2017

Взгляните на API времени java здесь: https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html

Посмотрите на класс java.time.Duration, он обладает той функциональностью, которую вы ищете. Я не могу предложить конкретную помощь без опубликованного кода.

person ja08prat    schedule 19.07.2017