I notice that your `ThreadLocalRandom` was copied from netty3.

maybe more details need to take as consideration.

1. third-party dependency need use carefully.
2. bugs fix need to trace from upstream repository.
3. performance benchmark

```
@BenchmarkMode({Mode.AverageTime})
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 3, time = 5)
@Measurement(iterations = 3, time = 5)
@Threads(50)
@Fork(1)
@State(Scope.Benchmark)
public class RandomBenchmark {

    Random random = new Random();

    @Benchmark
    public int random() {
        return random.nextInt();
    }

    @Benchmark
    public int threadLocalRandom() {
        return ThreadLocalRandom.current().nextInt();
    }

    @Benchmark
    public int nettyThreadLocalRandom() {
        return io.netty.util.internal.ThreadLocalRandom.current().nextInt();
    }

    public static void main(String[] args) throws RunnerException {
        Options opt = new OptionsBuilder()
                .include(RandomBenchmark.class.getSimpleName())
                .build();

        new Runner(opt).run();
    }

}
```
and below is our benchmark result under 50 concurrency
```
Benchmark                               Mode  Cnt     Score      Error  Units
RandomBenchmark.nettyThreadLocalRandom  avgt    3   160.321 ±   83.518  ns/op
RandomBenchmark.random                  avgt    3  3281.972 ± 2093.187  ns/op
RandomBenchmark.threadLocalRandom       avgt    3    91.505 ±   39.702  ns/op
```
Maybe i did something wrong with `netty.ThreadLocalRandom`, but from the result 
we can know the truth
> JDK 's ThreadLocalRandom looks good.

[ Full content available at: 
https://github.com/apache/incubator-dubbo/pull/2439 ]
This message was relayed via gitbox.apache.org for [email protected]

Reply via email to