用visualvm工具dump出来,可以看到,大量的线程处于等待状态,为什么?"pool-1-thread-173" prio=6 tid=0x44444400 nid=0x2d84 waiting on condition [0x4631f000]
   java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for  <0x1531b8e8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)   Locked ownable synchronizers:
- None"pool-1-thread-172" prio=6 tid=0x44443c00 nid=0x298c waiting on condition [0x4607f000]
   java.lang.Thread.State: WAITING (parking)
at sun.misc.Unsafe.park(Native Method)
- parking to wait for  <0x1531b8e8> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
at java.util.concurrent.locks.LockSupport.park(Unknown Source)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(Unknown Source)
at java.util.concurrent.LinkedBlockingQueue.take(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.getTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)   Locked ownable synchronizers:
- None

解决方案 »

  1.   

    一下子不好看。 楼主你跟一下 ,至少单次看看能不能跑通。
    然后你线程池干什么设成3200。。  你设这么大还用线程池干啥。。  你设置成CPU个数就行啦。 32足矣。
    你设置成3200 ,那还不如每来一个新的 ,你直接new thread。start呢。
    我猜测的原因可能是机器本身无法支持这么多线程。 因为IO是要停顿线程的,但是线程还存在。没有结束掉
    建议你把线程池大小设的小一点再看看效果