【发布时间】:2018-06-08 07:17:37
【问题描述】:
我有一个ConcurrentLinkedQueue,它可以被多个线程访问;其中的对象是不可变的。在一个线程中,我需要数据的快照,我通过调用stream 来完成。安全吗?我知道non-interference 的要求,但它似乎是在谈论对流操作之一的修改(“源可能不是并发的流管道永远不应该修改流的数据源” ),不一定是外部的。此外,ConcurrentLinkedQueue 是为并发访问而设计的,所以就是这样。
【问题讨论】:
-
“快照”将是终端操作将观察到的任何状态。因此,您的终端操作可能会“看到”这是最后一个元素,并通过
peek获取它;但在那之后(假设在终端操作完成之前),有人可能会添加更多元素。这就是你对弱一致性迭代器的期望......
标签: java multithreading concurrency java-8 java-stream