2013-04-09 104 views
1

我有一个关于Java线程的问题。这是我的情景:如何在Java中为多个用户实现multiquestion poll线程?

  • 不同的人会在他们的手机收到一条multiquestion调查。
  • 当问题发送时,服务器停留在等待()状态,直到收到答案。然后,发送一个通知()信号以继续轮询,直到发送所有问题。
  • 用户1可以回答问题3用户2仍然回答问题1.

我的做法迄今已实施新的ChainedPollThread线。无论如何,通过这种方式,如果用户1回答问题1用户1和2将收到第二个问题。

是否需要为每个用户创建一个新的ChainedPollThread

如果用户数量增加,这是否意味着我需要创建,例如100个线程?

哪种方法可以实现我想实现的目标?

在此先感谢。

回答

1

多线程的方式是每个参与者都需要一个线程。

您实现这一点的方式,现在意味着,只要有一个人回答一个问题,你的服务器端程序的整体状态推进到问题2。每个参与者有一个线程(因此,如果你愿意的话,一个投票程序)将解决问题。

为了减少服务器负载由于线程的不必要量,使用线程池(见http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html)。一旦线程池不再需要时,线程池会重新使用现有的线程,从而尽量减少活动线程的大小。 (创建线程是昂贵的部分),如果需要更多的,池长到规定的最大,如果不那么需要它收缩到一个指定的最小值。

在另一方面,整个模型有一些危险:如果有什么人不回答呢?服务器上是否会出现超时?它会永远等待吗?

一种选择可能是在移动设备上安装一个软件/架构,能够接收所有的问题和可能的答案进行投票,并提出他们的其他屏幕上后之一。一旦参与者按下“完成”,所选择的答案将被发回给您。这样你的服务器就不需要为每个参与者保存线程,只需要接收一个包含所有答案的字符串。

+0

谢谢你的回答西蒙。预防死锁的超时已经实现,所以没有问题。唯一的问题是我的“手机”不是真正的手机(我说这只是为了简化我的问题)。要接收问题的设备的存储能力非常低,无法处理这些大数据。线程池或信号量将是我的答案,我猜。非常感谢您的信息。 – 2013-04-09 09:46:56

+1

啊,信号灯,没有想到:) – 2013-04-09 09:51:22