【问题标题】:How to wake up the Client Thread in Below Situation?如何在以下情况下唤醒客户端线程?
【发布时间】:2012-12-26 13:17:58
【问题描述】:
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”来通知它时。 有人解决我的问题吗?感谢您的提前。

【问题讨论】:

    标签: java multithreading sockets networking


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 2021-12-30
      • 2011-12-15
      • 2015-12-19
      • 1970-01-01
      • 2019-12-17
      相关资源
      最近更新 更多