Я строю простую базовую модель агента в Anylogic. Я хочу осуществить голод для агентов. У агента есть параметр hunger
. Я хочу устанавливать hunger
+1 с каждым часом. Полагаю, это нужно делать с циклом, но я не знаю, с чего начать. Может ли кто-нибудь помочь мне построить цикл?
Работа с единицами времени в java
Ответы (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();
Это запустит все, что вы хотите, в отдельном потоке, который большую часть времени будет спать. Удачи, надеюсь, я смогу вам чем-то помочь.
Взгляните на API времени java здесь: https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html
Посмотрите на класс java.time.Duration, он обладает той функциональностью, которую вы ищете. Я не могу предложить конкретную помощь без опубликованного кода.