16

我正在尝试查找说明 java.util.concurrent.Future 是否是/不是线程安全的文档。例如,我可以安全地将同一个 Future 实例提供给多个线程,这些线程都将调用 Future.get(...)?

我已经以这种方式使用 Future 测试了代码,它似乎工作正常,但如果我能找到书面的期望,即未来以这种方式并发访问是安全的,我会更高兴。

谢谢。

4

2 回答 2

12

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

于 2011-12-05T18:56:16.613 回答
7

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

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

于 2011-12-05T18:54:46.210 回答