2012-12-26 72 views
0
class Server 
{ 
    while(true) 
    new ClientThread(Socket.accept()).start(); 
} 
class ClientThread extends Thread 
{ 
    public void run() 
    { 
     ppl.chat(Socket s);//a defined protocol object in my program 
    } 
} 
class Protocol 
{ 
    public Protocol(Socket s) 
    { 
      socket=s; 
    } 
    public synchronized void chat() 
    { 
     //here i defined socket input output streams and serverinput is a string given  by server 
     if(ServerInput=="wait") 
     wait(); 
     if(ServerInput=="cont") 
     notify() 
     .....................sending infomation------- 
     } 
}  

在這裏,我可以離開wait()塊之後,我無法通過此套接字發送信息。我測試了它成功地從等待塊中走出來。當通過從其他客戶端線程提供「續」來通知它時。 任何人解決我的問題?感謝您的提前。如何在以下情況喚醒客戶端線程?

回答

0

你的僞代碼是一個非常混亂的恕我直言,但我會做的是。

只使用客戶端線程進行閱讀,而不是寫作。

當你想寫點什麼,獲得一個寫鎖(不鎖定整個對象),或在單次寫入發送消息(它同樣的事情)

這樣讀線程只需要當有東西要讀時喚醒。

這意味着你不需要等待或通知我建議你在任何情況下使用。如果您需要它們,您應該使用在Java 5.0中添加的高級併發庫(但在本例中不是這樣)