gpt4 book ai didi

java - 如何同时执行两个方法才能保证不延迟?

转载 作者:行者123 更新时间:2023-12-01 19:46:26 26 4
gpt4 key购买 nike

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

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

我希望同时执行这两种方法/函数,以便一个机器人(USB 机器人)不会先于另一个机器人移动。

我知道 for 循环逐个元素地迭代,因此不适契约(Contract)时执行,因此尝试了以下操作:

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

但是,虽然延迟较少,但我知道这也会导致轻微的延迟。

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

最佳答案

第一个问题是您从一个线程调用 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();

关于java - 如何同时执行两个方法才能保证不延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53109331/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com