我有一个多线程应用程序,因此我使用池大小为5个线程实现了ExecutorService
public class SimpleThreadPool {
public static void main(String[] args) {
ExecutorService executor = Executors.newFixedThreadPool(5);
for (int i = 0; i < 10; i++) {
Runnable worker = new WorkerThread("" + i);
executor.execute(worker);
}
executor.shutdown();
while (!executor.isTerminated()) {
}
System.out.println("Finished all threads");
}
}
应用程序将部署在Websphere Web服务器上,设置包含线程池配置:应用程序服务器 > 线程池 > 默认值,最大大小设置为60。
我的问题是,哪个池大小配置会被采用,Websphere中的配置是否会覆盖代码中的配置(5个线程)?
while (!executor.isTerminated()) { }
是危险的。在这里你正在进行“热”等待;这意味着CPU将会旋转100%等待条件变为真——它将在几秒钟内调用该方法数十亿次。你真的想在循环体中加入一些“sleep(xxx)”调用! - GhostCat