我正在用 Java 制作一个聊天应用程序。
我有一个名为 Client 的类,其中有几种可以向我的服务器发送请求并等待响应的方法。我曾经这样做过:
public boolean authenticate(String login, String password) throws ResponseException{
try {
AuthentificationRequest req = new AuthentificationRequest(login,password);
this.out.writeObject(req);
this.out.flush();
Response rep=this.readResponse();
...
但我改变了从服务器接收响应的方式。现在我正在使用一个名为 ResponseHandler 的线程:
public void run() {
// TODO Auto-generated method stub
Response rep = new Response();
try {
while (!Thread.currentThread().isInterrupted()) {
this.isResponseReceived=false;
this.setResponse((Response) in.readObject()) ;
synchronized(this) {
this.isResponseReceived=true;
notify();
}
这是我的新方法“readResponse”:
public Response readResponse(Request req) throws ClassNotFoundException, IOException, InterruptedException {
synchronized(this.responseHandler) {
while(!this.responseHandler.isResponseReceived()) {
this.out.writeObject(req);
wait();
}
}
this.out.flush();
return this.responseHandler.getResponse();
}
这是我针对上一个示例的新客户端代码:
public boolean authenticate(String login, String password) throws ResponseException{
try {
Response rep = this.readResponse(new AuthentificationRequest(login,password));
但是看起来我的代码被阻塞到我的循环中......如何让我的客户端收到线程响应?
感谢您的反馈
我尝试让我的客户端通知并让我的 ResponseHandler 等待。我尝试了,但我的响应处理程序在等待模式下保持阻塞......
在我的客户端类中: 公共(public)响应 readResponse(Request req) 抛出 ClassNotFoundException、IOException、InterruptedException { 响应代表 = null;
synchronized(this.in) {
this.out.writeObject(req);
while(!this.responseHandler.isResponseReceived()) {
rep = this.responseHandler.getResponse();
in.notify();
}
}
this.out.flush();
return rep;
}
在我的 ResponseHandler 类中运行方法:
synchronized(this.in){
wait();
this.isResponseReceived=true;
System.out.println("thread unlocked");
}
我是一名优秀的程序员,十分优秀!