java.time.Instant(1.8)是线程安全的吗?

时间:2018-11-21 01:24:59

标签: java java.time.instant

Instant instant;
void updateBy(){
   instant = Instant.now();
}

如果是,如何证明Instant是线程安全的?

2 个答案:

答案 0 :(得分:2)

根据实施说明下的Instant文档:

  

此类是不可变的并且是线程安全的。

答案 1 :(得分:1)

  

如何证明Instant是线程安全的?

分析(使用合理的数学/形式方法)源代码,以证明其满足线程安全的所有要求。这是证明具有线程安全性的唯一方法。

您无法通过测试证明这一点。

您可以按任意方式测试非线程安全代码,并通过安全测试。但这并不能证明任何事情。在不同的OS平台或不同的Java版本(可能是将来的Java版本)上,测试仍可能失败。

(您可以通过测试来证明 是不是线程安全的。如果测试显示了非线程安全行为的无可争议的症状,那就是“存在证明”。)

对于Instant类,这应该是没有意义的。 javadoc 指定 Instant类是线程安全的。除非您有特定的理由认为该类不是线程安全的(这将是真正的JVM错误),否则建议不要浪费时间寻找可能不存在的内容