【发布时间】:2019-11-24 05:31:28
【问题描述】:
我有一个调用方法执行计算任务的 Web 方法。我使用了多线程方法,使用 java ExecutorService 调用此方法。到目前为止,这是我的代码:
@WebMethod
public void performIntensiveCalculation()
{
ExecutorService pool = CalculationThreadPool.getInstance().getThreadPool();
pool.execute( calculate );
}
我的CalculationThreadPool实现如下,
public class CalculationThreadPool
{
private static CalculationThreadPool instance;
private ExecutorService pool;
private CalculationThreadPool()
{
pool = Executors.newFixedThreadPool( 3 );
}
public synchronized static CalculationThreadPool getInstance()
{
if( instance == null )
{
instance = new CalculationThreadPool();
}
return instance;
}
public ExecutorService getThreadPool()
{
return pool;
}
}
由于此方法是作为 Web 方法公开的,因此请求可以随时来执行计算。我无法理解的是如何在创建的池中调用关闭方法。如果我在pool.execute() 行之后调用pool.shutdown(),以后的请求将无法使用线程池。
保持线程池不关闭是不好的做法吗?我是否使用错误的方式来完成我的任务?有没有更好的办法?
【问题讨论】:
标签: java multithreading executorservice