JDK 10:FutureTask获取一个toString()

  • 时间:
  • 浏览:
  • 来源:互联网

我已经有很长时间了,对于大多数具有独特属性的Java类,开发人员应该花时间重写Object.toString() ,即使它只是通过IDE生成的实现或使用诸如Apache之类的库类来实现Commons Lang的ToStringBuilder 。 如果要手动实现toString ,则重载的Objects.toString() 方法也比以往更容易实现。 随J2SE 5 引入的JDK类FutureTask最终在JDK 10中获得了自己的toString()实现 。

理查德·尼科尔斯 ( Richard Nichols )在2012年发表的文章“ 如何获取Java执行器的运行任务… ”突出显示了FutureTask类上toString()方法的省略。 他写了:


该API不包含任何方式收集有关内部事件的信息,这似乎很奇怪。
执行器 ,甚至没有
toString()实现,用于包装类似的类
FutureTask会冒泡您
可运行
可调用
toString()方法。

Nichols的帖子是在他的观察的背景下得出的:“在运行时实际上很难公开……Java的Executor在任何时间点实际上正在做什么。”

发行JDK-8186326 [“使“任务”对象的toString()方法更有用”]讨论了如何将FutureTask toString()与CompletableFuture的对齐,该问题指出“已经有一个有用的toString方法 ,给出了当前状态。” 一个电子邮件线程在2017年后期文档中添加围绕讨论toString()FutureTask等“在JUC任务类”( java.util.concurrent中 )。

Javadoc注释了新的FutureTask.toString()方法状态,“默认实现返回一个标识此FutureTask及其完成状态的字符串。 括号中的状态包含字符串“ Completed Normally ”,“ Completed Exceptionally ”,“ Cancelled ”或“ Not completed ”之一。” FutureTasktoString()的这四个潜在完成状态中的三个也有可能被写为CompletableFuturetoString() [“ Cancelled ”是例外)。

在JDK 10中,将toString()的特定实现添加到FutureTask类中只是一小部分。 但是,对于开发人员“如诊断JDK-8186326的“问题”语句中所述,在诊断应用程序故障时盯着“任务”对象(Runnables,Callables,Future)的toString的输出”,此“少量”添加可能是非常欢迎。

翻译自: https://www.javacodegeeks.com/2018/02/jdk-10-futuretask-gets-tostring.html

本文链接http://hi.ngui.cc/a/11494.html