2011-09-30 60 views
0

我最近开始在我的新多核机器上运行我的java程序。我突然看到一个从未发生过的旧单核Pentium问题。我怀疑这个问题与我的程序和我在同一时间运行的各种浏览器之间的某种争用有关。当进程进入这种状态时,没有任何数量的进程被杀死似乎有帮助(总是有一些残留的firefox或chrome进程),所以我最终重新启动机器。我的程序主要使用以下几行来打开和阅读大量网址:锁定在多核机器上的进程

URL url = new URL(urlString); 

URLConnection yc = url.openConnection(); 

BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream())); 

........ 

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

每隔一段时间我的程序尝试点击的URL都不存在。在这些情况下,创建BufferedReader的调用最终会超时。我将修改程序以使用更短的时间,但我怀疑这本身并不能解决问题。

任何建议,将不胜感激。

+1

您为什么认为您的Java应用程序与您的浏览器交互?你正在编写一个Applet或一个Servlet吗? –

+1

你说什么没有多大意义。毕竟,JVM运行在与浏览器不同的独立进程中。 –

+0

都是(新旧)连接到同一个网络?由于InputStream的read()方法阻塞,直到数据可用,因此“锁定”可能由网络连接中断造成。 – Robert

回答

0

我认为系统变化是一个红鲱鱼。当您在jdk上使用原始URL连接时,可能会有问题。没有内置的重试机制,你将不得不自己写所有的代码。尝试Apache的HTTP客户端库。这应该或多或少地解决您在URLConnection中遇到的任何问题 - http://hc.apache.org/httpclient-3.x/

+0

谢谢。这听起来是一个很好的建议。我想这将需要一些重大的改写,但不应该太糟糕。 – Ibrahim