【发布时间】:2015-12-28 17:06:16
【问题描述】:
假设线程 A 尝试将一个元素添加到 ConcurrentLinkedQueue,同时线程 B 尝试将不同的元素添加到同一个 ConcurrentLinkedQueue。
这两个项目是否会被添加到队列中,或者我会遇到并发问题(比如说,可能只会插入一个)?
我知道这个队列是线程安全的,但是我不知道这是否意味着当我从不同的线程同时调用它两次时我可以假设这个方法也是安全的。
如果不是,那么 put/offer 方法在这种情况下可能是安全的吗?
【问题讨论】:
-
Concurrent类的整体理念是它们是线程安全且高效的。 -
...“线程安全”类的整体理念是,无论有多少来自不同线程的同时调用,它的所有方法都做“正确的事情”。并发程序中“正确的事情”的含义并不总是 100% 显而易见,但在队列的情况下,这至少意味着添加的元素不会简单地从队列中消失,而且你永远不会从队列中拉出一个未添加的元素。
标签: java multithreading concurrency