java.util.concurrent.Future线程安全吗?

S42*_*S42 14 java multithreading java.util.concurrent

我试图找到指示java.util.concurrent.Future是否是线程安全的文档.例如,我可以安全地将Future的相同实例提供给多个线程,这些线程都会调用Future.get(...)吗?

我已经用这种方式使用Future测试了代码,它似乎工作得很好,但如果我能找到记录的期望,以这种方式未来对于并发访问是安全的,我会更高兴.

谢谢.

JB *_*zet 11

鉴于Future旨在被多个线程使用(至少是提交的线程,以及设置其结果的线程),并且假定文档指定异步计算与发生的操作之间存在先发生关系在get调用之后,我会假设这些实现是线程安全的(至少是标准实现).

  • 我强烈同意,实际上几乎肯定是安全的,因为在 2 个线程之间工作之前发生的线程安全通常也适用于 N 个线程,但是我不是 100% 清楚我是否可以解释当保证的措辞暗示单个其他线程时,发生在许多线程之前发生。尽管有这样的保留,我还是对你的评论进行了投票,因为它似乎是最好的答案。 (2认同)
  • @S42 你读的措辞太字面意思了。在Java中,一对线程之间绝对没有特殊的通信;所有线程通过同步内存进行通信,并且内存对所有线程同等可用。 (2认同)

Joh*_*int 6

如果您使用的是 Future从返回ExecutorService,那么是的,他们保证是线程安全的.由于Future是一个接口,因此接口的创建者不能保证所有实现都是线程安全的.

Nizet确实提出了一个好点.文档说Future接口的实现应该是线程安全的,而不是让实现线程安全会违反Future的合同