我正在使用Executors.newFixedThreadPool(N)
,其中 N 是代表池容量的任何数字。
问题如下:假设我们有100个线程,N = 10。所有Runnable都通过submit()方法传播到池中(实际上execute方法也有问题)。在Runnable的run()中的所有代码完成后(执行最后一行),池仍然保持前N个线程被挂起,而其他90个成功完成。 因此,改变N值会导致挂起线程数的相应变化。以下是暂停线程调用堆栈的示例:
Unsafe.park(boolean, long) line: not available [native method] [local variables unavailable]
LockSupport.park(Object) line: 156
AbstractQueuedSynchronizer$ConditionObject.await() line: 1987
LinkedBlockingQueue<E>.take() line: 399
ThreadPoolExecutor.getTask() line: 947
ThreadPoolExecutor$Worker.run() line: 907
Thread.run() line: 662
所有Runnable都运行相同的代码,不使用共享资源..
有什么想法吗?