Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java同步两条跑道以便飞机着陆?_Java_Synchronization - Fatal编程技术网

如何使用java同步两条跑道以便飞机着陆?

如何使用java同步两条跑道以便飞机着陆?,java,synchronization,Java,Synchronization,我似乎有个小问题。我有一个空中交通管制应用程序,有两条跑道,我要用java同步。这是因为,如果有一架飞机在飞机一号正在着陆时着陆,它(飞机二号)不必等待,但可以快速移动到跑道二号着陆 我已经成功地同步了一条跑道,我使用一个ArrayList来存储飞机的详细信息和着陆工作,但是第二架飞机的着陆需要等待(大约5秒)。关于如何同步两条跑道有什么想法吗 我现在的想法是有两个ArrayList(一个ArrayList(偶数)存储偶数个平面,如平面二、平面四)和另一个ArrayList(奇数)存储奇数个平面

我似乎有个小问题。我有一个空中交通管制应用程序,有两条跑道,我要用java同步。这是因为,如果有一架飞机在飞机一号正在着陆时着陆,它(飞机二号)不必等待,但可以快速移动到跑道二号着陆

我已经成功地同步了一条跑道,我使用一个
ArrayList
来存储飞机的详细信息和着陆工作,但是第二架飞机的着陆需要等待(大约5秒)。关于如何同步两条跑道有什么想法吗

我现在的想法是有两个
ArrayList
(一个
ArrayList(偶数)
存储偶数个平面,如平面二、平面四)和另一个
ArrayList(奇数)
存储奇数个平面,如平面一、平面三。然后我可以使
ArrayList(偶数)
与一号跑道配合使用,
ArrayList(奇数)
与二号跑道配合使用(使用我为一号跑道所做的单独同步技术)。缺点是,如果我在
ArrayList odd
中添加2个奇数编号的飞机,在
ArrayList
中添加20个偶数编号的飞机,当跑道2变为空闲时,它将不会被使用。取而代之的是只使用一号跑道,偶数的飞机将不得不等待

旁注:我知道如果两条跑道都被占用,第三架飞机将不得不等待,但根据markscheme,这是可以接受的

有什么建议吗


谢谢

要正确地执行此操作,您只需在一个队列中放置入境飞机。Java提供了一个队列实现,我建议您使用它,而不是自己滚动


设置好队列后,您需要两个跑道对象和一个“空中交通管制员”。空中交通管制员负责检查跑道,如果有可用的跑道,将飞机从队列中弹出并告诉它降落。

要正确地做到这一点,您只需要有一个队列,将进入的飞机放入其中。Java提供了一个队列实现,我建议您使用它,而不是自己滚动


设置好队列后,您需要两个跑道对象和一个“空中交通管制员”。空中交通管制员负责检查跑道,如果有可用的跑道,将飞机弹出队列并告诉它降落。

您需要一个值为2的计数信号灯。当有人想要着陆时,他们消耗信号灯中的1。当他们有信号灯时,他们可以选择降落在哪条跑道上(只需检查跑道的状态并选择一条空闲跑道)

如果信号量的值为0,那么人们将不得不等待。他们甚至不需要看跑道

当飞机离开跑道时,他们释放信号灯


上的Java文档提供了详细信息。

您需要一个值为2的计数信号量。当有人想要着陆时,他们消耗信号灯中的1。当他们有信号灯时,他们可以选择降落在哪条跑道上(只需检查跑道的状态并选择一条空闲跑道)

如果信号量的值为0,那么人们将不得不等待。他们甚至不需要看跑道

当飞机离开跑道时,他们释放信号灯


上的Java文档提供了详细信息。

为什么不使用requestLand()和reportClear()方法创建一个Tower对象,然后将跑道状态存储为Tower中的一个数组呢

我还缺少其他要求吗


不明白这两个ArrayList的用途吗?

为什么不使用requestLand()和reportClear()方法创建一个Tower对象,然后将跑道状态存储为Tower内部的数组

我还缺少其他要求吗


不明白这两个阵列列表的目的是什么?

您想做的是让每架飞机在需要使用跑道着陆/起飞时获得使用跑道的许可证。有两种方法可以做到这一点

如果了解跑道很重要: 使跑道成为一个对象,并将其放入跑道池中。例如,将机场的所有跑道放置在属于该机场的跑道中。当飞机需要跑道时,它可以调用BlockingQueue.take()来获得跑道。当飞机处理完跑道后,它应该调用BlockingQueue.put()将其释放以供另一架飞机使用

如果你不在乎哪条跑道:
使用a记录可用跑道的数量。每架飞机都需要获取并释放信号灯。

您要做的是让每架飞机在着陆/起飞时获得使用跑道的许可证。有两种方法可以做到这一点

如果了解跑道很重要: 使跑道成为一个对象,并将其放入跑道池中。例如,将机场的所有跑道放置在属于该机场的跑道中。当飞机需要跑道时,它可以调用BlockingQueue.take()来获得跑道。当飞机处理完跑道后,它应该调用BlockingQueue.put()将其释放以供另一架飞机使用

如果你不在乎哪条跑道:
使用a记录可用跑道的数量。每架飞机都需要获取并释放信号灯。

我将其标记为
作业
。如果这不是家庭作业,我就再也不会去机场附近了。@skaffman我也在想同样的事情。我把它标记为
家庭作业
。如果这不是家庭作业,我再也不会去机场附近了。@skaffman我也这么想。我不明白为什么这座塔一定是单身汉。塔应该是可以到达的,可以请求着陆,但是你不需要一个人来实现这一点。此外,使用单体将使正确编写跑道测试变得更加困难。你只有一座塔,它拥有两条跑道的控制权。这在多个塔楼中是如何工作的?Dependin