私はAnylogicで単純なエージェントベースモデルを構築しています。私が実装したいのは、エージェントの飢餓です。エージェントのパラメータはhunger
です。 1時間ごとにhunger
+1を設定します。私はそれがサイクルで行われるべきだと思いますが、私はどのように起動するのか分かりません。誰かがサイクルを構築するのを助けることができますか?Javaで時間単位を操作する
1
A
答えて
0
これは1つの解決策ですが、これは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()メソッドの仕上げの間に1時間になりたい場合は、コンストラクタで、この代わりに使用してください。
int initialDelay = 0;
scheduler.scheduleWithFixedDelay(this, initialDelay, delay, timeUnit)
これは、すべての操作、呼び出し、run()メソッドで実行されているものを1時間待ってから、もう一度呼び出します。 これがあなたの望むものかどうかはわかりません。 これは簡単でしょうか?
new Thread(new Runnable() {
@Override
public void run() {
try {
TimeUnit.HOURS.sleep(1);
} catch (InterruptedException e) {
// Code here
}
}
}).start();
これは、ほとんどの時間スリープする別のスレッドで必要なものを実行します。幸運にも、何とかお手伝いできることを願っています。
1
ここではJavaの時間のAPIを見てみましょう:java.time.Durationクラスでhttps://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html
ルックを、それはあなたが探している機能を備えています。私はいくつかのコードを投稿せずに特定のヘルプを提供することはできません。
これはすばらしい解決策です。しかし、私は、anylogicにはスケジューラー機能があり、APIで設定できることがわかりました:-) –