有拍賣服務器接受客戶端,併爲每個套接字連接一個新的線程服務客戶端。每個線程都有它的協議。服務器只有一個拍賣對象的實例。 Auction
對象保存了對象的列表Lot
。 Auction
對象作爲參數傳遞給客戶端線程。 Protocol
必須有辦法投標並以某種方式通知所有客戶線程。方法存在於Lot
中,它對出價列表進行出價。下一步是通知所有客戶端線程形式makeBid
的方法。最佳做法是什麼? 如何使用共享資源與其他線程通信?
我試圖在Thread中使用一個字段(MSG)來保存消息。線程檢查是否!MSG.isEmpty()
而run()
。如果!MSG.isEmpty()
然後ClientThread
打印到此套接字MSG
。我認爲有一個更好的解決方案。
public class ClientServiceThread extends Thread {
public String PRINT_NEW_MSG = "";
while (m_bRunThread) {
if(!PRINT_NEW_MSG.isEmpty()){
out.println("PRINT_NEW_MSG: "+PRINT_NEW_MSG);
PRINT_NEW_MSG = "";
String clientCommand = in.readLine();
...
}
}
是否有任何特殊的原因,您不能讓線程等待'BlockingQueue',也許是出價消息? –
這是你的領域的好主意。我更喜歡所有客戶都會被告知的觀察員。所有客戶都需要在觀察員身上註冊。只有一個實例 - 比如你的服務器對象是一個好主意。 (用觀察者擴展你的服務器)。 [鏈接] http://en.wikipedia.org/wiki/Observer_pattern – glenn