我已经在我的应用程序中使用ExecutorService
创建了线程池,以调用供应商Web服务,使用下面的代码。
ExecutorService executor = Executors.newFixedThreadPool(getThreadPoolSize());
for (int i = 0; i < list.size(); i++) {
Request ecpReq = list.get(i);
thRespLst.add(executor.submit(new Task(ecpReq)));
}
我想知道我们是否需要关闭线程池之类的,基本上我不希望在正式生产环境中挂起线程。
FinalizableExecutorService
和ThreadPoolExecitor
覆盖finaliz()
以执行关闭。
/**
* Invokes {@code shutdown} when this executor is no longer
* referenced and it has no threads.
*/
protected void finalize() {
shutdown();
}
实际上,我认为没有理由显式关闭ExecutorService
。
公共静态ExecutorService newFixedThreadPool(int n线程)
创建一个线程池,该线程池重用在共享无界队列上运行的固定数量的线程。在任何时候,线程最多都是活动的处理任务。如果在所有线程都处于活动状态时提交其他任务,它们将在队列中等待,直到有线程可用。如果任何线程在关机前的执行过程中由于故障而终止,那么如果需要执行后续任务,将有一个新线程替代它。池中的线程将一直存在,直到显式关闭。
Javadocs。
这里有一个很好的解释。
问题内容: 我有一个网站,它的点击率很高,我遇到了问题,JDCB连接错误。 我对关闭有点困惑,我需要关闭还是仅关闭就足够了。 另外,我需要关闭它吗? 问题答案: 是的,您必须关闭PreparedStatement和结果集,因为它们可能导致内存泄漏。有关更多信息,请访问 http://docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
我有一个网站,点击量很大。我遇到过一些问题,包括JDBC连接错误。 我对结束PreparedStatement有点困惑。我需要关闭PreparedStatement吗?还是只需要关闭语句就足够了? 另外,呢?我也需要关闭它吗?
问题内容: 使用JDBC连接池工具(如DBCP或c3p0)有什么好处? 如果只有 一个* 用户的 小型CRUD 应用程序,我们是否可以将 一个 连接会话创建为一个 单例 ? * PS :我正在构建一个带有小型数据库(5个表)的小型后端应用程序。 问题答案: 从Jon Skeet的答案到连接和语句池的好处是什么?: 创建到数据库服务器的网络连接是(相对)昂贵的。同样,要求服务器准备SQL语句(相对)
几个月前,我在使用java.sql时了解到了这一点。连接我需要关闭PreparedStatements和ResultSet,以防止内存泄漏,如下所述 然而,我最近开始与一个使用org.sql2o的新团队合作。连接,这是一个很好且有用的jdbc包装器,但我注意到它们通常不会关闭其org.sql2o。查询对象。 如您所见,查询对象从未显式关闭。我认为最好同时关闭查询: 但我不确定这是否真的有必要。如果
问题内容: 我的代码是: 在文档中: InputStream的close方法不执行任何操作。 这是否意味着我不需要关闭InputStream? 问题答案: 您确实需要关闭输入Stream,因为您提到的方法返回的流实际上是FileInputStream或该文件的某个其他子类,该子类包含文件的句柄。如果不关闭此流,则可能会导致资源泄漏。
我在我的应用程序中保存了和的一个实例,每次我想执行一些操作时,我都会调用。 我想知道我是否需要显式关闭连接,就像JDBC中的一样。 要强调的是,我只有一个实例。我的问题不是关于关闭,而是关闭我相信它在调用时打开的连接。