我正在尝试查找指示java.util.concurrent.Future是否不是线程安全的文档。例如,我可以安全地将Future的相同实例提供给多个线程,这些线程都将调用Future.get(...)?
我已经用这种方式使用Future测试了代码,它似乎工作得很好但是如果我能找到记录的期望未来以这种方式对并发访问是安全的,我会更高兴。
感谢。
答案 0 :(得分:11)
鉴于Future打算由多个线程使用(至少是提交的线程,以及设置其结果的线程),并且假定文档指定异步计算和之间存在先发生关系。在get调用之后发生的操作,我会假设这些实现是线程安全的(至少是标准实现)。
答案 1 :(得分:6)
如果您使用的是从Future
返回的ExecutorService
,则可以保证它们是线程安全的。由于Future是一个接口,因此接口的创建者不能保证所有实现都是线程安全的。
Nizet确实提出了一个好点。文档说,Future接口的实现应该是线程安全的,而不是使实现线程安全会违反Future的合同