美文网首页
http get死锁

http get死锁

作者: 五大RobertWu伍洋 | 来源:发表于2020-06-23 14:09 被阅读0次

原始java代码请求一个url时,没有设置连接超时和读超时,导致该连接一直存在。

-------------------------------------------------------------------------------------

"JobCourier0" prio=10 tid=0x0000000002776800 nid=0x5ef runnable [0x00007f6d5c4a3000]

java.lang.Thread.State: RUNNABLE

at java.net.SocketInputStream.socketRead0(Native Method)

at java.net.SocketInputStream.read(Unknown Source)

at java.net.SocketInputStream.read(Unknown Source)

at java.io.BufferedInputStream.fill(Unknown Source)

at java.io.BufferedInputStream.read1(Unknown Source)

at java.io.BufferedInputStream.read(Unknown Source)

- locked <0x000000077690aa60> (a java.io.BufferedInputStream)

at sun.net.www.http.HttpClient.parseHTTPHeader(Unknown Source)

at sun.net.www.http.HttpClient.parseHTTP(Unknown Source)

at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)

- locked <0x00000007768ffb98> (a sun.net.www.protocol.http.HttpURLConnection)

at SubProcess.Level2.SyncWithoutBlank.SyncWithoutBlankEncodeBlank.sendGet(SyncWithoutBlankEncodeBlank.java:57)

at SubProcess.Level2.SyncWithoutBlank.SyncWithoutBlankEncodeBlank.invoke(SyncWithoutBlankEncodeBlank.java:82)

at sun.reflect.GeneratedMethodAccessor107.invoke(Unknown Source)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

at java.lang.reflect.Method.invoke(Unknown Source)

at com.tibco.ae.processapi.ui.javachooser.JavaClassMethodUtility.invokeMethod(Unknown Source)

at com.tibco.plugin.java.JavaActivity.eval(Unknown Source)

at com.tibco.pe.plugin.Activity.eval(Unknown Source)

at com.tibco.pe.core.TaskImpl.eval(Unknown Source)

at com.tibco.pe.core.Job.a(Unknown Source)

at com.tibco.pe.core.Job.k(Unknown Source)

at com.tibco.pe.core.JobDispatcher$JobCourier.a(Unknown Source)

at com.tibco.pe.core.JobDispatcher$JobCourier.run(Unknown Source)

-------------------------------------------------------------------------------------

源码如下:

package SubProcess.Level2.SyncWithoutBlank;

import java.util.*;

import java.io.*;

import java.io.BufferedReader;

import java.io.DataOutputStream;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

import javax.net.ssl.HttpsURLConnection;

public class SyncWithoutBlankEncodeBlank{

/****** START SET/GET METHOD, DO NOT MODIFY *****/

protected String url = "";

protected String USER_AGENT = "";

protected String responsestr = "";

public String geturl() {

return url;

}

public void seturl(String val) {

url = val;

}

public String getUSER_AGENT() {

return USER_AGENT;

}

public void setUSER_AGENT(String val) {

USER_AGENT = val;

}

public String getresponsestr() {

return responsestr;

}

public void setresponsestr(String val) {

responsestr = val;

}

/****** END SET/GET METHOD, DO NOT MODIFY *****/

public SyncWithoutBlankEncodeBlank() {

}

private String sendGet(String url) throws Exception {

URL obj = new URL(url);

HttpURLConnection con = (HttpURLConnection) obj.openConnection();

con.setConnectTimeout(15000);

con.setReadTimeout(15000);

//默认值我GET

con.setRequestMethod("GET");

//添加请求头

con.setRequestProperty("User-Agent", USER_AGENT);

//      int responseCode = con.getResponseCode();

//  System.out.println("\nsend GET to : " + url);

//  System.out.println("Response Code : " + responseCode);

BufferedReader in = new BufferedReader(

new InputStreamReader(con.getInputStream()));

String inputLine;

StringBuffer response = new StringBuffer();

while ((inputLine = in.readLine()) != null) {

response.append(inputLine);

}

in.close();

//打印结果

//    System.out.println("Response Code : " + responseCode + ". response : " + response.toString());

return response.toString();

}

public void invoke() throws Exception {

/* Available Variables: DO NOT MODIFY

In  : String url

In  : String USER_AGENT

Out : String responsestr

* Available Variables: DO NOT MODIFY *****/

//url=url.replace("https://","http://");

//found the reason that sendGet would not cause errors in queue, cause it would not take 4xx,5xx to be caught as errors

url=url.replaceAll(" ","%20");

responsestr=sendGet(url);}

}

相关文章

网友评论

      本文标题:http get死锁

      本文链接:https://www.haomeiwen.com/subject/dndgpxtx.html