我有一个方法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同步。
答案 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();