gpt4 book ai didi

java - 有没有办法判断连接是否因超时或线程死亡而退出?

转载 作者:行者123 更新时间:2023-11-29 05:12:55 26 4
gpt4 key购买 nike

我有一些与 API 对话的代码。服务器运行大约一天后,它会在调用 stream.read 时卡住;

我决定将代码放在一个线程中。因此,如果线程超时,它将为 api 的返回值返回 null。我找不到任何代码来判断连接退出是超时还是线程死亡

String GetBitrexApiThread(String url) {

cThread cRun=new cThread();
cRun.url=url;
cRun.run();
try {
// wait 10 seconds to make api call
cRun.join(1000*30);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

// would like to return a null if thread timedout.
return cRun.reply;
}

// thread code
public class cThread extends Thread {
String reply;
String url;

public void run() {
try {

URL myurl = new URL(url);
System.out.println("Open connection");
HttpsURLConnection con = (HttpsURLConnection) myurl.openConnection();
con.setConnectTimeout(15000);
System.out.println("Get input stream");
InputStream ins = con.getInputStream();
System.out.println("Create reader");
InputStreamReader isr = new InputStreamReader(ins);
System.out.println("Creat buffer reader");
BufferedReader in = new BufferedReader(isr);

String inputLine;

System.out.println("Read indata2");

int t;
while ((t= in.read()) != -1) {
// System.out.println("next read");
reply+=(char)t;;
// System.out.println(reply);
}

System.out.println("finish Read indata");
} catch (Exception e) {
System.out.println("Exception in getting data from API server");
reply=null;
}
}
};

最佳答案

我假设您将替换 run();start();否则您的后台任务将在当前线程中运行。

判断任务是否仍在运行的方法是调用thread.isAlive();您还需要将结果以线程 sfae 的方式传回并处理抛出的异常。

正如我所说,ExecutorService 会为您完成这一切。

关于java - 有没有办法判断连接是否因超时或线程死亡而退出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27695395/

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