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”通知它。
谁解决了我的问题?谢谢你的进步。
答案 0 :(得分:0)
你的伪代码是一个非常混乱的恕我直言,但我会做的是。
仅使用客户端线程进行阅读,而不是写作。
当您想要写入时,获取写锁定(不要锁定整个对象)或在单次写入中发送消息(这可以做同样的事情)
这样,只有在有东西需要读取时才需要唤醒读取线程。
这意味着您无需等待或通知我建议您在任何情况下使用。如果需要它们,则应使用Java 5.0中添加的高级并发库(但不是在这种情况下)