我简单做了一下测试.
用for 循环启动1000个线程,
每个线程的run()中只写两句
println('start')
sleep(2000) //休眠2秒.1000个线程启动完成(for循环结束).只用了十几豪秒.当我把1000改成10000的时候.
共用了5000多豪秒.
我想是因为jvm 限制了最多启动的线程数, 当线程数超过最大数时,要启动新的线程必须要等待其它线程运行完才能启动.
假如我把sleep(2000),改成sleep(1),完成启动10000个thread只需要100多豪秒. 由此可见jvm是有最大启动线程限制的,我想知道有没有具体的数字.
用for 循环启动1000个线程,
每个线程的run()中只写两句
println('start')
sleep(2000) //休眠2秒.1000个线程启动完成(for循环结束).只用了十几豪秒.当我把1000改成10000的时候.
共用了5000多豪秒.
我想是因为jvm 限制了最多启动的线程数, 当线程数超过最大数时,要启动新的线程必须要等待其它线程运行完才能启动.
假如我把sleep(2000),改成sleep(1),完成启动10000个thread只需要100多豪秒. 由此可见jvm是有最大启动线程限制的,我想知道有没有具体的数字.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货