在java中使用时间单位

时间:2017-07-19 14:59:39

标签: java anylogic agent-based-modeling

我正在Anylogic中构建一个简单的代理基础模型。我想要实现的是代理商的饥饿。代理具有hunger参数。我想每小时设置hunger +1。我想应该用循环完成,但我不知道如何开始。有人可以帮助我建立这个循环吗?

2 个答案:

答案 0 :(得分:1)

在这里查看java time api:https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html

查看java.time.Duration类,它具有您正在寻找的功能。如果没有贴出一些代码,我就无法提供具体的帮助。

答案 1 :(得分:0)

这是一个解决方案,但是这没有考虑完成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();

这将在大多数时间都会睡眠的单独线程中运行您想要的任何内容。祝你好运,我希望我能以某种方式帮助你。