Как я могу выполнить два метода одновременно, чтобы гарантировать отсутствие задержки? - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть метод botMovement(), который управляет роботами USB. Он вызывается дважды со значениями / элементами параметров из ArrayList следующим образом:

for (BOTx1 aBot : theBotAL) { // theBotAL contains the BOTs DataType
    botMovement(aBot);
} 

Я бы хотел, чтобы оба метода / функции выполнялись одновременно, чтобы один бот (робот USB) не перемещался раньше другого.

Я понимаю, что цикл for повторяет элемент за элементом и поэтому не подходит для одновременного выполнения, поэтому попытался сделать следующее:

botMovement(theBotAL.get(0)); botMovement(theBotAL.get(1));

Однако, хотя задержка меньше, я понимаю, что это тоже вызывает небольшую задержку.

Следовательно, я хотел бы знать, существует ли способ вызова обоих методов одновременно, чтобы синхронизировать botMovement.

1 Ответ

0 голосов
/ 02 ноября 2018

Первая проблема заключается в том, что вы вызываете botMovement из одного потока (в случае, если botMovement не создает поток внутренне), поэтому они не работают одновременно, а последовательно.

Лучше всего было бы создать два потока, которые будут ждать защелки, и когда вы вызовете countDown (), они будут уведомлены о запуске.

      // CREAT COUNT DOWN LATCH
        CountDownLatch latch = new CountDownLatch(1);

   //create two threads:
        Thread thread1 = new Thread(() -> {
          try {
            //will wait until you call countDown
            latch.await();
           botMovement(theBotAL.get(0))

          } catch(InterruptedException e) {
            e.printStackTrace();
          }
        });

        Thread thread2 = new Thread(() -> {
          try {
            //will wait until you call countDown
            latch.await();
           botMovement(theBotAL.get(1))
          } catch(InterruptedException e) {
            e.printStackTrace();
          }
        });

    //start the threads
        thread1.start();
        thread2.start();
    //threads are waiting

    //decrease the count, and they will be notify to call the botMovement method
     latch.countDown();
...