当前位置: 首页 > 面试题库 >

为什么ExecutorService接口未实现AutoCloseable?

阴雪风
2023-03-14
问题内容

未能调用shutdown()线程执行器将导致应用程序永不终止。

关闭ExecutorService的最佳实践是:

ExecutorService service = null;
try {
  service = Executors.newSingleThreadExecutor();
  // add tasks to thread executor
  …
} finally {
  if (service != null) service.shutdown();
}

既然Java知道try-with-resources概念,那么如果我们能做到这一点岂不是很好吗?

try (service = Executors.newSingleThreadExecutor())
{
  // add tasks to thread executor
  …
}

问题答案:

该ExecutorService实际上具有
两种 与关机有关的方法;基于一个简单的事实,即关闭服务的 两种 方式都有意义。

因此:您将如何自动关闭服务?以一致的方式为每个人工作?!

因此,在我眼中,合理的解释是:您不能将ExecutorService设为AutoClosable,因为该服务没有像操作这样的“关闭”操作;但是两个!

而且,如果您认为可以充分利用这种自动关闭服务,那么使用“委托”编写自己的实现将是5分钟的事情!大概是10分钟,因为您将创建一个shutdown()称为close操作的版本。而shutdownNow()相反。



 类似资料:
  • 问题内容: 实现接口。接口没有方法。当我检查它没有实现接口。 那么,在实现的意义何在? 问题答案: 没有方法的接口在Java中称为标记接口。 根据RandomAccess的JavaDoc: List实现使用的标记接口,指示 它们支持快速(通常为恒定时间)随机访问。 有关更多信息,请检查两个JavaDoc页面。 http://docs.oracle.com/javase/6/docs/api/jav

  • 问题内容: 我刚刚发现Java允许枚举实现接口。有什么好的用例? 问题答案: 枚举不仅仅代表被动集(例如颜色)。他们可以代表与功能更复杂的对象,所以你可能想进一步功能添加到这些是那么-例如,你可能如接口,等等。支持这些和组件。

  • 问题内容: @Entity public class Husband implements Serializable { 广义上是什么? 类为什么实现接口? 为什么丈夫成员一个人只有@OnetoOne(mappedBy =“ Wife”),而妻子成员却没有@OnetoOne(mappedBy =“ husband”) 问题答案: 广义上讲,序列化是Java为开发人员提供的将任何对象的状态持久保存到

  • 问题内容: 我的意思是: 我用谷歌搜索,发现了这个: 表示定义接口方法的实现。但是接口没有实现,因此是不可能的。 但是,interface是100%抽象的类,抽象类可以实现接口(100%抽象的类)而无需实现其方法。将其定义为“接口”时会出现什么问题? 详细来说, 问题答案: 表示实现,当旨在声明仅提供不提供实现时。 A 100%,是功能上等同于,但它也可以实现,如果你想(在这种情况下,它不会保持1

  • 问题内容: 根据Java文档中的Serializability: 通过实现java.io.Serializable接口的类,可以启用类的可序列化性。未实现此接口的类将不会对其状态进行序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义 为什么对象尚未实现?我们不希望可序列化的成员可以设为。为什么要阻止默认的Serializability?

  • 我正在学习一本书,即“.NET域驱动的C#设计”。 问题基于如下类图所示的场景: 图:http://screencast.com/t/a9uuljvw0 现在,如果我用ICompanyRepository变量comrep调用Add()函数... 然后调用RepositoryBase类(它是CompanyRepository的父类)中的Add()函数。 我的问题是:在(抽象基)类“repositor