2017-07-19 5 views
1

私はAnylogicで単純なエージェントベースモデルを構築しています。私が実装したいのは、エージェントの飢餓です。エージェントのパラメータはhungerです。 1時間ごとにhunger +1を設定します。私はそれがサイクルで行われるべきだと思いますが、私はどのように起動するのか分かりません。誰かがサイクルを構築するのを助けることができますか?Javaで時間単位を操作する

答えて

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(); 

これは、ほとんどの時間スリープする別のスレッドで必要なものを実行します。幸運にも、何とかお手伝いできることを願っています。

+0

これはすばらしい解決策です。しかし、私は、anylogicにはスケジューラー機能があり、APIで設定できることがわかりました:-) –

関連する問題