我试过编写一个方法里每次调用这个方法都创建10个线程去干一件事情,然后多次调用这个方法,调用多了以后发现会出现java heap space这样的提示内存溢出的问题,而且接下来提示“Thread-1000”之类的反正好像意味着之前的线程一直在累加,我不知道这是怎么回事,难道调用一次方法后,方法里的10个线程不会自动释放吗?
     新人求解

解决方案 »

  1.   

    Java 虚拟机不会自动释放线程,直到下列任一情况出现时为止
    1:调用了 Runtime 类的 exit 方法,并且安全管理器允许退出操作发生。 
    2:所有线程都已停止运行,无论是通过从对 run 方法的调用中返回,还是通过抛出一个传播到 run 方法之外的异常。 
    3:执行Thread对象的interrupt()方法,中断线程。
      

  2.   


    调用完了以后你join()了吗?
      

  3.   

    当然join()了,方法里调用线程如下:                Thread[] thread=new Thread[10];
    thread[0]=new Thread(new SearchCrawler(starturl,nowtime));
    thread[0].start();
    Thread.sleep(1000);
    for(int i=1;i<10;i++)
    {
    thread[i]=new Thread(new SearchCrawler(starturl,nowtime));
    thread[i].start();
    }
    for(int j=0;j<10;j++)
    {
    thread[j].join();
    }
    然后我就是多次调用这个方法了
      

  4.   

    你这个join执行的时候,前面的线程都已经启动了,你还多次调用这个方法,既然是多线程,那也就不是前面10个执行完后面10个再执行,你这里的join没起到你想起的作用,你应该把join直接放到start后面去
      

  5.   

    其他地方不清楚,不过我就是奇怪它为什么提示“Thread-1000”之类的信息,给我感觉之前的线程一直没有释放。
      

  6.   

    你看我贴出来的代码,我调用了join()了,现在我想想可能内存溢出和线程无关,不过我还是想知道为什么会提示“Thread-1000”这样的信息?