java 是否保证 corepool 线程将始终在 ThreadPoolExecutor 中保持活动状态?
我多次运行我的测试代码,但似乎不能保证。
我尝试使用 allowCoreThreadTimeOut=true 和 allowCoreThreadTimeOut = false。然而,行为并没有改变。
这是我的测试代码。请尝试使用 noOfTaskToRun 1 和 4 的两个不同值。
public static void main(String[] args) {
int noOfTaskToRun = 1;
ThreadPoolExecutor executor = new ThreadPoolExecutor(2, 4, 2000, TimeUnit.MILLISECONDS, new SynchronousQueue<Runnable>());
executor.allowCoreThreadTimeOut(false);
List<Thread> threads = new ArrayList<Thread>();
for(int i = 0; i<noOfTaskToRun ; i++)
threads.add(new Thread("thread" + i) {
public void run() {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
for (Thread thread : threads) {
executor.execute(thread);
}
System.out.println("Before executor.getActiveCount(): "+ executor.getActiveCount());
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("After executor.getActiveCount(): "+ executor.getActiveCount());
}
我将 keepAliveTime 修改为 2000。即使现在线程正在超时。