2017-07-19 12 views
1

Je construis un modèle de base d'agent simple dans Anylogic. Ce que je veux mettre en œuvre, c'est la famine des agents. L'agent a un paramètre hunger. Je veux définir le hunger +1 avec chaque heure. Je suppose que cela devrait être fait avec le cycle mais je ne sais pas comment commencer. Quelqu'un peut-il m'aider à construire le cycle?Travailler avec des unités de temps dans java

Répondre

0

Ceci est une solution, mais cela ne prend pas en compte le temps nécessaire pour terminer la méthode 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. 
     } 
    } 

Si vous voulez qu'il soit une heure entre la fin de la méthode run(), utilisez ensuite l'utiliser à la place dans le constructeur.

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

Cela attendre 1 heure entre toutes les opérations, les appels, thats en cours d'exécution dans votre méthode run(), puis l'appeler à nouveau. Je ne suis pas sûr si c'est ce que vous vouliez. Peut-être que c'est plus facile?

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

Cela exécutera tout ce que vous voulez dans un thread séparé qui dormira la plupart du temps. Bonne chance, j'espère pouvoir vous aider d'une manière ou d'une autre.

+0

Ce serait une excellente solution. Cependant, j'ai découvert que anylogic a des fonctions de planificateur où vous pouvez simplement le configurer dans l'API :-) –