我有一个特定的要求,我希望在两个线程之间进行通信。
我想使用Java 1.6实现这个多线程用例
让我们假设,我们必须使用无人驾驶飞机来保护区域。该区域可在X轴上测量100km,在Y轴上测量100km。可以使用{x,y}坐标来定位该平面中的每个乡绅km。
无人机可以拥有预定义的飞行路径(它可以是随机的,在这个平原的任何地方),例如{0,1} {0,2} {0,3} {0,4} {0,5} { 0,6}。他们必须保持从{0,1}飞到{0,6}。一旦无人机到达目的地,它应该开始返回旅程,例如从{0,6}到{0,1}并继续向后飞行,除非停止。
但有一个转折 - 让我们说在上面的飞行路径drone1从{0,1}开始到达{0,2}。 drone1将继续在{0,2}处徘徊,直到另一架无人机释放它。例如,无人驾驶飞机2具有完全不同的飞行路径,但在路径上有一个或两个常见位置,就像无人机1一样,将指示无人机1“你可以从这个位置释放自己并继续飞向你的路径,因为我来这里获取这个位置”
如果您已正确理解用例,那么问题是,已经获得{0,2}锁定的thread1必须等到thread2指示释放它。
我们如何做到这一点,如何将消息发送到另一个线程并等到位置为空?
答案 0 :(得分:0)
线程间信令有两种常见的方法:
while(signal)
循环中执行其例程,并在信号变为false
ConcurrentLinkedQueue
,信号发送器不断将“任务”推入队列,并且忙线程继续从中拉出。只要有任务要做,繁忙的线程就会继续工作,只要不再有工作就会停止。答案 1 :(得分:0)
这是使用wait()和notify()的经典示例。一旦无人机到达目的地,它就会进入一个等待的块()。这将释放同步块上的锁定。一旦无人机2到达,它就会调用notify()。这会唤醒无人机1。
public class Square(){
...
public void arriveOnSquare(){
notify();
...
synchronized(this){
wait();
}
...
}
}