2013-04-09 75 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