我有一个多线程应用程序,所以我实现了池大小为 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 个线程(?
件事彼此无关。
服务器设置与服务器使用的线程有关。请参阅文档:
使用此页面来配置应用程序服务器使用的一组线程。请求通过任何 HTTP 传输发送到服务器。线程池使服务器的组件能够重用线程,从而消除了在运行时创建新线程的需要。创建新线程会花费时间和资源。
现在,应用程序代码将创建自己的独立线程池。
这与该系统池无关。
当然,您的应用程序可能会将"任务"发送到该系统线程池;以这种方式使用它。
不,这些将是不同的线程池。
具有 60 个线程的线程需要通过 jndi 服务按名称进行处理。Websphere 线程池有点不同。例如,它支持 JTA(分布式(事务。您只能在这些特殊线程池中使用 JTA 事务。
本地的将有 5 个线程,并且不受 Websphere 的任何影响。您可以通过提交大量任务,然后通过 jstack 或 kill -3 命令打印线程堆栈来检查线程数。