1. /**
    2. * 在之前的测试中, 每个Benchmark都是一个方法, 然后所有线程都去执行这个方法
    3. * ---
    4. * 现在我们有个新的需求, 就是两套不同的代码, 要在一个Benchmark中一起执行
    5. * 然后再看执行效率
    6. *
    7. */
    8. /**
    9. * 比如下面这个例子:
    10. * 我们猜猜看看在多线程竞争状态下, AtomicInteger 的执行效率如何
    11. * ---
    12. * 3个线程执行自增的代码, 1个线程执行获取数据的代码
    13. * 一共4个线程, 他们在Benchmark中一起执行, 可以模拟 AtomicInteger在多线程竞争的情况下执行效率
    14. */
    1. @Benchmark
    2. @Group("benchmark1_thread_competition")
    3. @GroupThreads(3)
    4. public int inc() {
    5. return counter.incrementAndGet();
    6. }
    7. @Benchmark
    8. @Group("benchmark1_thread_competition")
    9. @GroupThreads(1)
    10. public int get() {
    11. return counter.get();
    12. }
    1. @Benchmark
    2. @Group("benchmark2_inc_no_competition")
    3. @GroupThreads(1)
    4. public int inc3() {
    5. // 3个线程只执行自增操作, 应该跟上面差不多
    6. // 因为即使只有自增操作, 但由3个线程, 所有操作还是会在竞争状态
    7. return counter.incrementAndGet();
    8. }
    9. @Benchmark
    10. @Group("benchmark3_get_no_competition")
    11. public int get1() {
    12. // 这个benchmark只有一个线程在执行get操作
    13. // 效率直接拉满
    14. return counter.get();
    15. }