起因是看到这样一段代码
queued = UNSAFE.compareAndSwapObject(this, waitersOffset,
q.next = waiters, q);
这里第三个参数类型也是Object类型
但是输入是q.next = waiters;
这个怎么解释呢?这个其实分为两步来看、第一步将waiters 赋值给q.next; 第二步是把q.next的值作为参数传递给这个函数。
自己写的一个测试
package Test;
public class Test1 {
public static void main(String[] args) {
int i = 6;
s(i = 7);
System.out.println(i);
}
public static void s (int i) {
System.out.println(i);
}
}
结果均输出7, 表明是先把参数传给i, 再把i 传给函数调用的。