具体原理说明:https://my.oschina.net/u/4108008/blog/3048302
##代码解释:
/**
* 伪共享
*
*/
public class FalseSharing {
public static void main(String[] args) throws InterruptedException {
// 测试多个线程是不是修改的同一个CPU缓存行
// VolatileLong2 volatileLong = new VolatileLong2();
VolatileLong volatileLong = new VolatileLong();
long startTime = System.currentTimeMillis();
for (int j = 0; j < 10; j++) {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 100_000_000; i++) {
volatileLong.v1 = i;
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 100_000_000; i++) {
volatileLong.v8 = i;
}
});
t1.start();
t2.start();
// 等待线程运行结束
t1.join();
t2.join();
}
long endTime = System.currentTimeMillis();
System.out.println("spend time " + (endTime - startTime) + " ms");
}
/**
* v1,v8属于不同缓存行
*
*/
static class VolatileLong {
volatile long v1;
long v2, v3, v4, v5, v6, v7;// 控制是不是同一缓存行
volatile long v8;
}
/**
* v1,v8属于同一缓存行
*
*/
static class VolatileLong2 {
volatile long v1;
volatile long v8;
}
}