Для класса JMH номер резьбы ограничен 1 через @ Threads (1) .
Однако, когда я получаю количество потоков, используя Thread.activeCount () , это показывает, что существует 2 потока.
Упрощенная версия кода приведена ниже:
@Fork(1)
@Warmup(iterations = 10)
@Measurement(iterations = 10)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MICROSECONDS)
@Threads(1)
public class MyBenchmark {
@State(Scope.Benchmark)
public static class BState {
@Setup(Level.Trial)
public void initTrial() {
}
@TearDown(Level.Trial)
public void tearDownTrial(){
}
}
@Benchmark
public List<Integer> get(BState state) {
System.out.println("Thread number: " + Thread.activeCount());
...
List<byte[]> l = new ArrayList<byte[]>(state.dict.get(k));
...
}
}
На самом деле значение пытается получить из словаря , используя его ключ.Однако, когда существует 2 потока, ключ не может получить из словаря, и здесь список l становится [] .
Почему ключ не берется?Из-за этого количество нитей ограничено 1.