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()块之后我不能通过这个套接字发送信息。我测试它成功地从等待块中出来。当通过从其他客户端线程给出“cont”来通知它时。有人解决我的问题吗?感谢提前。

4

1 回答 1

0

您的伪代码是一个非常令人困惑的恕我直言,但我会做的是。

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

当你想写时,获得一个写锁(不要锁定整个对象)或在一次写中发送消息(这做同样的事情)

这样,阅读线程只需要在有要阅读的内容时唤醒。

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

于 2012-12-26T13:31:01.237 回答