在模拟中移动多个车辆的有效方式

时间:2013-01-30 11:24:37

标签: java multithreading animation concurrency threadpool

所以,我怀疑在下面给出的情况下哪种方式最优:

我模拟了地图上沿着道路行驶的车辆。移动他们是没有问题的,他们遵守红绿灯等。但我的问题是,什么是最有效的移动车辆的方式。现在我每条路都有一条线程,所以一条线路沿着道路向南移动到北方,另一条线路从西向东移动等等。但它不是非常优化且非常慢。此外,我发现很难让线程跟踪汽车之间的距离,因此它们可以减速并且不会相互超越。

我是否需要使用Executor包中的java.util.concurrent类创建一个线程池,然后每个车辆有一个线程,然后在车辆离开模拟后释放线程?或者这会让它变慢吗?

总而言之,如果我上面没有说清楚,我试图找到一种最佳方式来跟踪当前在模拟中的车辆(地图)。我试图让每条道路都有一个让车辆通过的线程,但这不是一个好的解决方案,因为我最终需要车辆拥有自己的逻辑。

3 个答案:

答案 0 :(得分:2)

我会有一个线程用于整个模拟。锁定开销(CPU和编码开销)可能大于拥有多个线程的好处。

  

我最终需要车辆拥有自己的逻辑。

我会有一个方法来调用每个对象,如move(),并在一个线程中重复调用所有对象。每辆汽车或物体都知道它应该如何移动。

答案 1 :(得分:0)

最好知道你的模拟实际上做了什么,比如汽车如何决定他们去哪里以及停车时有多快等等。无论如何,这似乎是一个由许多汽车,道路组成的大型车型,交通灯等。对于多线程,它必须得到很好的保护(锁定或同步)。您能否根据时间步骤拆分工作中的工作,然后同时查看每辆车?似乎在小任务中思考比在线程中更好,因此您可以稍后选择线程数。

答案 2 :(得分:0)

如何使用像Akka这样的Actor模型进行模拟? Actor模型用于连续模拟(与离散事件模拟相反)。