如何同时执行两个方法以确保没有延迟?

时间:2018-11-01 21:03:53

标签: java multithreading simultaneous

我有一个方法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 :(得分:3)

第一个问题是您正在从一个线程调用botMovement(以防botMovement不在内部创建线程),因此它们不是同时运行而是按顺序运行。

最好是两个创建2个线程来等待闩锁,并且当您调用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();