1. JMH 的 @State 与线程安全
JMH 的 @State 与线程安全如何理解?
- @State 作用域
- 线程安全
- 基准隔离
JMH 的 @State 注解定义基准共享的状态对象,作用域有:Scope.Benchmark(所有线程共享同一实例)、Scope.Thread(每个线程独立实例)、Scope.Group(线程组内共享)。@State 决定基准中状态变量的共享范围,影响线程安全:Scope.Thread 每个线程独立,无共享竞争;Scope.Benchmark 多线程共享实例,需线程安全(如用不可变对象、synchronized、原子类),否则产生竞争影响基准结果。@State 对象在基准前初始化(@Setup),在基准后清理(@TearDown)。理解 @State 作用域与线程安全是编写正确 JMH 基准的关键,避免共享状态竞争导致结果失真。
@State 作用域决定共享方式,Scope.Thread 隔离、Scope.Benchmark 共享。理解作用域与线程安全是正确基准的核心。