Как запускать задачи в фиксированном пуле потоков - PullRequest
0 голосов
/ 08 марта 2020

Я пишу симулятор сети и хочу, чтобы все методы маршрутизации маршрутизаторов работали параллельно. У меня есть ExecutorSercive типа fixedThreadpool. Идея состоит в том, чтобы l oop на маршрутизаторах отправить новую задачу службе для каждого маршрутизатора. По какой-то причине сервис, кажется, запускает только одну задачу. Я не уверен, если это проблема с тем, как я это называю. Я вижу других людей онлайн, использующих service.execute (). Я только начинаю параллельное программирование. Заранее спасибо.

    var clock = new SimpleClock();
    network.setClock(clock);
    var routers = network.allRouters();
    do{
      clock.step();
      Semaphore routing = new Semaphore( 0 );
      for( Router r : routers ){
        service.execute(new Runnable() {
          @Override
          public void run() {
            r.route();
            routing.release();
          }
        });
        try {
          routing.acquire( routers.size() );
        } catch (InterruptedException e) {
          e.printStackTrace();
        }
      }
    }while( network.isActive() );
  }
...