我正在研究一种爬虫,它可以在JAVA中不间断地抓取整个网络。
为了提高抓取速度,我已经在其中实现了线程。但这是我无法理解的。
请考虑以下代码:
for(int i=0; i<no_of_threads; i++){
new Thread("" + i){
public void run()
{
try
{
System.out.println("Instance: " + getName() + " running");
getSeed();
Thread.sleep(1000);
}
catch (Exception e)
{
e.printStackTrace();
System.out.println("Thread could not start: "+getName());
}
}
}.start();
}
首先,程序显示以下输出:
Instance: 5 running
Instance: 6 running Instance: 4 running Instance: 3 running Instance: 2 running Instance: 1 running
Instance: 7 running Instance: 0 running
Instance: 8 running
Instance: 9 running
在此之后,它从正常执行开始,程序连续运行一段时间。 突然间,我明白了:
Thread could not start: 6
并连续编程一段时间。然后,
Thread could not start: 9
突然所有线程都停止了。
仅在线程启动时处理异常时才会给出消息“线程无法启动”。但是,因为它已经显示“Instance Running”,这意味着线程已经在运行。
我无法理解为什么以及如何发生这种情况。
答案 0 :(得分:3)
你自己的消息&#34;线程无法启动&#34;是不正确的。该线程已经启动,但您刚刚在Exception
内发现了某种Thread
。您正在打印异常的堆栈跟踪,但您没有在此处包含它。检查堆栈跟踪以确定真正的问题。这不是线程没有开始的;线程中还有一些其他问题。