Java8使用@Contended避免伪共享
为了避免多线程更新的变量或对象处于同一缓存行而导致的伪共享问题,使用@Contended注解可大幅提升执行效率。
package com.chen.allen.learn; import sun.misc.Contended; public class ContendedTest { // @Contended volatile long a; // @Contended volatile long b; public static void main(String[] args) throws InterruptedException { ContendedTest c = new ContendedTest(); Thread thread1 = new Thread(() -> { for (int i = 0; i < 10000_0000L; i++) { c.a = i; } }); Thread thread2 = new Thread(() -> { for (int i = 0; i < 10000_0000L; i++) { c.b = i; } }); final long start = System.nanoTime(); thread1.start(); thread2.start(); thread1.join(); thread2.join(); System.out.println((System.nanoTime() - start) / 100_0000); } }
注意:需要加上启动参数-XX:-RestrictContended