如何同时执行两个方法才能保证不延迟?
How can I execute two methods at the same time to ensure there is no delay?
我有一个控制 USB 机器人的方法 botMovement()
。它使用来自 ArrayList
的参数 values/items 调用两次,如下所示:
for (BOTx1 aBot : theBotAL) { // theBotAL contains the BOTs DataType
botMovement(aBot);
}
我希望两个 methods/functions 同时执行,这样一个机器人(USB 机器人)就不会先于另一个移动。
我知道 for 循环逐个元素迭代,因此不适合同时执行,因此尝试了以下操作:
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();
我有一个控制 USB 机器人的方法 botMovement()
。它使用来自 ArrayList
的参数 values/items 调用两次,如下所示:
for (BOTx1 aBot : theBotAL) { // theBotAL contains the BOTs DataType
botMovement(aBot);
}
我希望两个 methods/functions 同时执行,这样一个机器人(USB 机器人)就不会先于另一个移动。
我知道 for 循环逐个元素迭代,因此不适合同时执行,因此尝试了以下操作:
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();