Java并发 - 大理石围绕着一个圆圈

时间:2014-03-27 18:35:26

标签: java concurrency

让我们想象一个简单的Java程序,其中有5个2D弹珠以固定顺序在一个圆圈中移动。你可以控制每块大理石的速度,记住较慢的大理石阻挡大理石移动得更快(它们不能超越)。它们都朝一个方向移动。编程的最佳方法是什么?我们的想法是为每个大理石分配一个单独的线程,这实际上是其中一个要求。 然后我创建了五个线程,在所有线程共有的某个对象上同步“move”方法。如果有一些自由空间,下一步是检查我是否可以向前移动大理石。所以在我移动之前,我会检查是否有空闲空间然后采取行动。在这里使用wait()和notify()机制是否必要或至少是个好主意? 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

好吧,我不会为你准备好你的作业,但这里有一个高级别的看法。

您需要每个大理石定期更新它的位置,因此需要某种类型的循环。这个循环通常被称为游戏循环。以下是对它们的各种类型的讨论,从简单到复杂。 http://www.java-gaming.org/index.php?topic=24220.0对于您的项目,某些事情可能就足够了,但我不知道它的要求。

每次大理石试图移动时,都必须检查以确保它没有被阻挡。如果你已经同步了move方法,那么一次只能移动一个大理石,这样可以避免并发问题。

除了在游戏循环中使用Thread.sleep之外,我认为你没有任何理由等待。 Java有一个synchronize关键字,可用于锁定您提到的用于移动的共享对象,以避免并发问题。所以我不相信waitnotify是必要的。

只是我的想法,我希望它有所帮助。