0

我有一个关于 Java 线程的问题。这是我的场景:

  • 2 个不同的人将在他们的手机中收到一个多问题民意调查。
  • 发送问题后,服务器会一直处于等待()状态,直到收到答案。然后,发送一个notify () 信号让轮询继续进行,直到发送完所有问题。
  • 用户 1可能正在回答问题 3,而用户 2仍在回答问题 1。

到目前为止,我的方法是实现一个新的ChainedPollThread线程。无论如何,通过这种方式,如果用户 1回答了问题 1,则用户1 和用户 2都会收到第二个问题。

我需要为每个用户创建一个新的ChainedPollThread吗?

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

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

提前致谢。

4

1 回答 1

1

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

你现在实现的方式意味着,一旦有人回答了一个问题,你的服务器端程序的整个状态就会推进到第二个问题。每个参与者都有一个线程(因此,如果你愿意的话,一个民意调查程序)将缓解这个问题。

要减少由于不必要的线程数量而导致的服务器负载,请使用线程池(请参阅http://docs.oracle.com/javase/tutorial/essential/concurrency/pools.html)。一旦不再需要现有线程,线程池就会重新使用它们,从而试图将活动线程的大小保持在最低限度。(创建线程是昂贵的部分)如果需要更多,则池增长到指定的最大值,如果需要更少,则缩小到指定的最小值。

另一方面,整个模型有一些危险:如果一个人根本不回答怎么办?服务器会超时吗?它会永远等待吗?

一种选择可能是在移动设备上安装一个软件/框架,它能够接收所有问题和可能的投票答案,并在屏幕上一个接一个地呈现。一旦参与者按下“完成”,一组选择的答案就会发送回给您。这样,您的服务器就不需要为每个参与者保留线程,只需接收一个包含所有答案的字符串。

于 2013-04-09T09:16:15.920 回答