首页 / JAVA / java-应用程序陷入僵局
java-应用程序陷入僵局
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java-应用程序陷入僵局,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4313字,纯文字阅读大概需要7分钟。
内容图文
![java-应用程序陷入僵局](/upload/InfoBanner/zyjiaocheng/677/189816139709496cabe3334ad4c5b10a.jpg)
我的应用程序在运行runnnig一段时间后陷入僵局.我进行了一次线程转储,发现我所有的应用程序线程剩下一个都停留在以下状态
"APP-Thread-20" prio=6 tid=0x0000000007414800 nid=0x1268 waiting on condition [0x000000000951f000]
java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.$$YJP$$park(Native Method)
- parking to wait for <0x00000000e0179568> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at sun.misc.Unsafe.park(Unsafe.java)
at java.util.concurrent.locks.LockSupport.park(LockSupport.java:156)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1987)
at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:399)
at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
at java.lang.Thread.run(Thread.java:662)
Locked ownable synchronizers:
- None
处于可运行状态的唯一线程停留在使用SAX Parser的代码处.线程转储如下
"APP-Thread-19" prio=6 tid=0x0000000007413800 nid=0x18b4 runnable [0x00000000094de000]
java.lang.Thread.State: RUNNABLE
at java.net.SocketInputStream.$$YJP$$socketRead0(Native Method)
at java.net.SocketInputStream.socketRead0(SocketInputStream.java)
at java.net.SocketInputStream.read(SocketInputStream.java:129)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:218)
at java.io.BufferedInputStream.read1(BufferedInputStream.java:258)
at java.io.BufferedInputStream.read(BufferedInputStream.java:317)
- locked <0x00000000e2f3fee8> (a java.io.BufferedInputStream)
at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:697)
at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:640)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1195)
- locked <0x00000000e2f3ff90> (a sun.net.www.protocol.http.HttpURLConnection)
at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
at org.apache.xerces.impl.XMLDTDScannerImpl.startPE(Unknown Source)
at org.apache.xerces.impl.XMLDTDScannerImpl.skipSeparator(Unknown Source)
at org.apache.xerces.impl.XMLDTDScannerImpl.scanDecls(Unknown Source)
at org.apache.xerces.impl.XMLDTDScannerImpl.scanDTDExternalSubset(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:198)
at com.test.Parser.Parser.parseDocument(Parser.java:33)
at com.test.processor.LinkExtractor.extractLinksFromXml(LinkExtractor.java:222)
at com.test.processor.LinkExtractor.process(LinkExtractor.java:102)
at com.test.content.pipeline.PipelineProcessingTask.run(PipelineProcessingTask.java:76)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Locked ownable synchronizers:
- <0x00000000e017c3b8> (a java.util.concurrent.locks.ReentrantLock$NonfairSync)
所有线程都在执行一系列任务,其中解析只是任务之一.用于解析的代码未同步,并且每个线程都在执行新的Parser().parse().
这个问题是否集中在SAXParser周围?还是我看错了方向?
我有3个线程转储,并且在所有3个场景中都是相同的.
这是解析代码.请求是一个httpMethod.
byte[] data = IOUtils.toByteArray(req.getResponseBodyAsStream());
body = new String(data,"UTF-8").trim();
Parser parser = new Parser();
List<String> entries = parser.parseDocument(response);
解决方法:
解析器在阻止所有其他线程的同时,正在等待来自网络的输入.
内容总结
以上是互联网集市为您收集整理的java-应用程序陷入僵局全部内容,希望文章能够帮你解决java-应用程序陷入僵局所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。