Contended 在 JDK9 及其后续版本中的问题 sun.misc.Contended 是在JDK8 中引入的,为了解决填充问题。 但是大家注意,Contended注解是在包sun.misc,这意味着一般来说是不建议我们直接使用的。 虽然不建议大家使用,但是还是可以用的。 但如果你使用的是JDK9-JDK14,你会发现sun.misc.Contended没有了! 因为JDK9引入了JPMS(Java Platform Module System),它的结构跟JDK8已经完全不一样了。 经过我的研究发现,sun.misc.Contended, sun.misc.Unsafe,sun.misc.Cleaner这样的类都被移到了jdk.internal.**中,并且是默认不对外使用的。 那么有人要问了,我们换个引用的包名是不是就行了? import jdk.internal.vm.annotation.Contended; 上面的问题就是包的路径使用不同的 JDK 已经不在路径中了。 但是,就算你使用了上面的包,你还是会遇到相关的错误: error: package jdk.internal.vm.annotation is not visible @jdk.internal.vm.annotation.Contended ^ (package jdk.internal.vm.annotation is declared in module java.base, which does not export it to the unnamed module) 好,我们找到问题所在了,因为我们的代码并没有定义module,所以是一个默认的“unnamed” module,我们需要把java.base中的jdk.internal.vm.annotation使unnamed module可见。 要实现这个目标,我们可以在javac中添加下面的 flag: --add-exports java.base/jdk.internal.vm.annotation=ALL-UNNAMED 有关在 IDEA 中的添加方法,请参考文章:IntelliJ IDEA 如何添加编译参数 https://www.ossez.com/t/sun-misc-contended-cannot-find-symbol/13758