2017-06-21 73 views
3

我有一个多线程的应用程序,所以我实现ExecutorService 5线程池大小多线程在WebSphere

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服务器与设置包含线程池配置中部署:应用程序服务器>> Thread Pools>默认情况下,最大大小设置为60.

我的问题是,采用哪种池大小配置,Websphere中的配置是否覆盖代码中的配置(5个线程)?

+0

你的问题对我没有意义。你能否澄清更多? –

+0

如果您发现我的答案有帮助 - 您能否考虑接受它? – GhostCat

+1

和无关:这样的“空”循环:'while(!executor.isTerminated()){}'是** ** **。你在这里等着“热”这意味着CPU将100%旋转,等待条件成真 - 它会在几秒钟内对该方法进行数十亿次的调用。你真的想把一些“睡眠(xxx)”调用放入循环体中! – GhostCat

回答

2

这两件事情没有任何关系。

服务器设置是关于服务器使用的线程。请参阅documentation

使用此页面配置应用程序服务器使用的一组线程。请求通过任何HTTP传输发送到服务器。线程池使服务器的组件能够重用线程,以消除在运行时创建新线程的需要。创建新线程会花费时间和资源。

现在,您的应用程序代码创建自己的独立线程池。

其中有没有与该系统池。

当然,您的应用程序可能会将“任务”发送到该系统线程池;以这种方式使用它。

+0

Thx为您的答案。 – Bill

2

不,这些将是不同的线程池。

具有60个线程的人需要通过jndi服务的名称来禁用。 Websphere线程池有点不同。例如,它支持JTA(分布式)事务。您只能在这些特殊线程池内使用JTA事务。

本地的将有5个线程,不受任何方式影响Websphere。您可以通过提交大量任务来检查线程数量,然后通过jstackkill -3命令打印线程堆栈。

+0

@GhostCat谢谢,你也+1 =) –

+0

谢谢先生:) @Andrey Cheboksarov – Bill