我简单做了一下测试.
用for 循环启动1000个线程,
每个线程的run()中只写两句 
println('start') 
sleep(2000) //休眠2秒.1000个线程启动完成(for循环结束).只用了十几豪秒.当我把1000改成10000的时候.
共用了5000多豪秒. 
我想是因为jvm 限制了最多启动的线程数, 当线程数超过最大数时,要启动新的线程必须要等待其它线程运行完才能启动. 
假如我把sleep(2000),改成sleep(1),完成启动10000个thread只需要100多豪秒. 由此可见jvm是有最大启动线程限制的,我想知道有没有具体的数字.

解决方案 »

  1.   

    应该跟JVM所允许的最大内存有关吧
      

  2.   

    不是gc的问题,jvm可用内存还有很多,java根本没运行gc. 因为这个thread object本身占用很少,运行1000个也根本看不到jvm占用的内存有明显变化.
      

  3.   

    我改了一下程序,让每个线程都无限休眠sleep(1000000). 结果每次都最多只能启动7121个线程.
      

  4.   

    我用的是 jdk 1.5.08. 大家可以测试
      

  5.   

    ?  JAVA 1个进程 多少个进程效率最好 ?
      

  6.   

    java的Thread对象占用的内存比较少(大概几十K),在C#下面创建一个线程居然占用1M左右的内存搞不懂。。