如何在以下情况下唤醒客户端线程?

时间:2012-12-26 13:17:59

标签: java multithreading sockets networking

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()块。我测试它成功地从等待块中出来。通过从其他客户端线程提供“cont”通知它。 谁解决了我的问题?谢谢你的进步。

1 个答案:

答案 0 :(得分:0)

你的伪代码是一个非常混乱的恕我直言,但我会做的是。

仅使用客户端线程进行阅读,而不是写作。

当您想要写入时,获取写锁定(不要锁定整个对象)或在单次写入中发送消息(这可以做同样的事情)

这样,只有在有东西需要读取时才需要唤醒读取线程。

这意味着您无需等待或通知我建议您在任何情况下使用。如果需要它们,则应使用Java 5.0中添加的高级并发库(但不是在这种情况下)