众所周知,JVM创建线程是要占用资源的,JDK5.0后默认创建一个线程占用1MB(系统内存,通
过
-Xss修改
),也就说1GB内存(空闲内存)最多创建1K个线程就会异常。
所以需要多线程运行的任务时,使用线程池,比如
newFixedThreadPool
验证一下线程是什么时候创建的。
debug运行通过jconsole可以发现当执行start方法时才会创建。
当执行到第10行之前的JVM线程数 12个
当执行start()方法后 JVM线程数变为13个,(因为执行过后自动关闭了,只有峰值显示13。如果想要清晰的看到13个线程,就在run()方法里打断点)