首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何同时执行两个方法以确保没有延迟?

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

Stack Overflow用户
提问于 2018-11-01 21:03:52
回答 1查看 61关注 0票数 0

我有一种控制botMovement()机器人的方法。使用来自ArrayList的参数值/项调用它两次,如下所示:

代码语言:javascript
复制
for (BOTx1 aBot : theBotAL) { // theBotAL contains the BOTs DataType
    botMovement(aBot);
} 

我希望这两种方法/功能同时执行,这样一个机器人(USB机器人)就不会在另一个机器人之前移动。

我理解for循环逐元素迭代元素,因此不适合同时执行,因此尝试如下:

代码语言:javascript
复制
botMovement(theBotAL.get(0)); botMovement(theBotAL.get(1));

不过,虽然延误较少,但我明白这亦会造成轻微的延误。

因此,我想知道是否有一种方法同时调用两个方法,以便botMovement是同步的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-02 09:01:26

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

最好是创建两个线程,它们将等待锁存器,当您调用countDown()时,它们将被通知启动。

代码语言:javascript
复制
      // 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();
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53109331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档