我的多线程程序开始几个钟头还挺快,CPU也就占用0-%30左右。可是慢慢地,越来越慢,CPU占用%100、程序却不怎么运行了(从控制台打印信息来看)。大家说这什么原因?是不是太累了?每跑完一段就让它们Sleep一下。
肯定不是内存泄露的原因吧,我用jprofier测试,也没发现内存泄露,这也与内存泄露没关系吧。

解决方案 »

  1.   

    死循环了吧,要不就是notify太频繁但却又不能真正唤醒某个线程
      

  2.   

    线程主要是占用CPU资源,和可能你程序在运行时建立了线程,但是这些线程又没有被及时释放掉,所以运行的线程数越来越多,导致它们大量占用cpu资源,这和内存泄漏其实没什么关系。
    本身线程的建立就是比较消耗系统资源的,而且线程本身也很难处理,必须要处处小心,不然会到处出问题,而且出了问题还不知道哪出了问题。
      

  3.   

    一点小小的建议:首先你看看你的程序有没有一般性的内存泄露
    其次,再看看是不是的确由于你的多线程引入的复杂性造成的泄漏
    推荐一个工具,netbean自带的性能分析工具profiler,可以检测这些问题,推荐
      

  4.   

    线程多了,他们占用的cpu时间段就多,在线程间不断的转换也多
      

  5.   

    线程多了 ,程序会报HEADSTACK这个错误,很明显不是 线程多的问题,是虚拟机内存占用太大,没有被及时回收。可以尝试用System.gc();
      

  6.   

    jdk自带线程池,简单好用。别自己写了。当然可以自己写个练练手。很简单的。
      

  7.   

    用线程池,或者定时提醒JVM回收垃圾