In a 最近的问题 https://stackoverflow.com/questions/48319047/why-concurrentlinkedqueue-source-code-use-to-check-for-tail/48319214#48319214,我们找到了下面这段代码:
// p, t, q and tail are Node<E> objects.
p = (p != t && t != (t = tail)) ? t : q;
忽略问题的上下文,我对以下行为感兴趣:
t != (t = tail)
考虑到这些都是相同类型的对象,无论类型如何。这和:有什么区别吗?
t != tail
或者我在比较机制中遗漏了一些重要的东西?
EDIT
如果有人想知道,可以在并发链接队列 https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html班级来自java.util
,第 352 行。
t != (t = tail)
相当于
oldt = t;
t = tail;
... oldt != t...
即原始值t
与tail
另外t
被赋值为tail
.
这是一种简短的写作方式
if (t != tail) {
t = tail;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)