0

У меня есть код Java, который должен быть прочитан несколькими агентами, которые были созданы платформой JADE. У каждого агента есть свой поток выполнения. Поэтому все мои агенты запускают мой Java-код одновременно, но не одновременно. Я пытался использовать класс CyclicBarrier из java API, который должен создать барьер таким образом, чтобы все потоки агента собирались вместе при прохождении через этот барьер, но этот класс не работает для потоков агента, только для java потоки. Кто-нибудь знает способ синхронизации потоков этих агентов? Любые предложения?Синхронизация потоков нескольких агентов

+0

Зачем вам нужна синхронизация агента? Агенты должны работать самостоятельно. В любом случае, вы можете настроить для этого протокол. Вот пример: http://www.db-thueringen.de/servlets/DerivateServlet/Derivate-19681/ESM2009_S337-341.pdf – darlinton

ответ

-1

Я поставил задержку в тех же агентов таким образом:

try{ 
    Thread.sleep(1000);     //1000 milliseconds is one second. 
} catch(InterruptedException ex) { 
    Thread.currentThread().interrupt(); 
} 

Я надеюсь, чтобы помочь вам.

+1

Ожидание настенных часов - это * не * механизм синхронизации в любом случае. – JustSid

+0

Это правда. Вы правы. –

+0

не является решением проблемы. – user24094

0

Тот факт, что Агенты в Джейд работают по потоку и обрабатывают свое поведение в этом потоке, означает, что можно использовать CyclicBreaker из пакетов Java-совместимости (java.util.concurrent.CyclicBarrier). Или более простой формой будет CountDownLatch. Но это само по себе, реализация OneShotBehaviour.

Секвенирование поведения агента может быть сделано с помощью переключателя в случае каждого взаимодействующего поведения агента

int state = 0; 
switch(state){ 
state 0: 
    // Do action one 
    break; 
state 1: 
    // Do action two 
    break; 
} 
state++; 

 Смежные вопросы

  • Нет связанных вопросов^_^