gpt4 book ai didi

java - 从线程获取InputObjectStream

转载 作者:太空宇宙 更新时间:2023-11-04 10:04:28 27 4
gpt4 key购买 nike

我正在用 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");
}

关于java - 从线程获取InputObjectStream,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53094016/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com