Java中的线程问题

时间:2014-04-25 16:58:01

标签: java multithreading

我正在研究一种爬虫,它可以在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”,这意味着线程已经在运行。

我无法理解为什么以及如何发生这种情况。

1 个答案:

答案 0 :(得分:3)

你自己的消息&#34;线程无法启动&#34;是不正确的。该线程已经启动,但您刚刚在Exception内发现了某种Thread。您正在打印异常的堆栈跟踪,但您没有在此处包含它。检查堆栈跟踪以确定真正的问题。这不是线程没有开始的;线程中还有一些其他问题。