2014-09-22 18 views
5

Utknąłem na java.net.SocketInputStream.socketRead0 (metoda macierzysta). Proszę zobaczyć zrzut wątku, jak poniżej, jest w tym stanie przez 3 godziny.Utknąłem na java.net.SocketInputStream.socketRead0 (metoda macierzysta)

Thread-0" prio=10 tid=0x00007facd02a5000 nid=0x309 runnable [0x00007facd4a43000] 
java.lang.Thread.State: RUNNABLE 
    at java.net.SocketInputStream.socketRead0(Native Method) 
    at java.net.SocketInputStream.read(SocketInputStream.java:150) 
    at java.net.SocketInputStream.read(SocketInputStream.java:121) 
    at sun.security.ssl.InputRecord.readFully(InputRecord.java:442) 
    at sun.security.ssl.InputRecord.read(InputRecord.java:480) 
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:927) 
    - locked <0x00000000e34a0428> (a java.lang.Object) 
    at sun.security.ssl.SSLSocketImpl.readDataRecord(SSLSocketImpl.java:884) 
    at sun.security.ssl.AppInputStream.read(AppInputStream.java:102) 
    - locked <0x00000000e34a0590> (a sun.security.ssl.AppInputStream) 
    at java.io.BufferedInputStream.fill(BufferedInputStream.java:235) 
    at java.io.BufferedInputStream.read1(BufferedInputStream.java:275) 
    at java.io.BufferedInputStream.read(BufferedInputStream.java:334) 
    - locked <0x00000000e30408b8> (a java.io.BufferedInputStream) 
    at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:633) 
    at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:579) 
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1322) 
    - locked <0x00000000e3031d00> (a sun.net.www.protocol.https.DelegateHttpsURLConnection) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254) 
    - locked <0x00000000e3031c80> (a sun.net.www.protocol.https.HttpsURLConnectionImpl) 

Ustawiłem limit czasu połączenia i czas oczekiwania na połączenie URLConnection. Zobacz poniższy fragment kodu. Więc nie wiem, dlaczego zawiesiłby się na java.net.SocketInputStream.socketRead0. Po prostu mam ten problem sporadycznie. Każda sugestia jest doceniana!

public String sendPost(String params) throws Throwable { 
PrintWriter out = null; 
String htmlContent = null; 
try 
{ 
    StringBuffer strBuffer = new StringBuffer(); 
    URL url = new URL(this.webUrl); 
    URLConnection urlConnection = url.openConnection(); 
    urlConnection.setConnectTimeout(3000); 
    urlConnection.setReadTimeout(3000); 

    urlConnection.setRequestProperty("accept", "*/*"); 
    urlConnection.setRequestProperty("connection", "Keep-Alive"); 
    urlConnection.setRequestProperty("user-agent", "***"); 

    urlConnection.setDoOutput(true); 
    urlConnection.setDoInput(true); 

    out = new PrintWriter(urlConnection.getOutputStream()); 
    out.print(params); 
    out.flush(); 

    BufferedReader bufferdReader = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8")); 
    String readLine = null; 
     try { 
      while ((readLine = bufferdReader.readLine()) != null) { 
       strBuffer.append(readLine); 
      } 
     } catch (Throwable e) { 
      return htmlContent; 
     } 
     htmlContent = strBuffer.toString(); 
     bufferdReader.close(); 
+0

'Connection: keep-alive' jest domyślnym. Nie piszesz żadnych parametrów POST: czy to celowe? – EJP

+0

dzięki @EJP, właśnie wklejam więcej kodu do cytatu kodu, to operacja pocztowa. przejrzyj go ponownie .. – BurningDocker

+0

Czy masz jakieś aktualizacje na ten temat? Mam dokładnie ten sam problem. – HamoriZ

Odpowiedz

0

Myślę, że jest to błąd związany z URLConnection. Użyj gniazd i limitu czasu, aby sprawdzić.

Powiązane problemy