netty为啥要再实现一个PriorityQueue,为什么不实现java原生的PriorityQueue?

开天门
  • 19

我在AbstractScheduledEventExecutor类中看到scheduledTaskQueue方法。

import io.netty.util.internal.DefaultPriorityQueue;

PriorityQueue<ScheduledFutureTask<?>> scheduledTaskQueue() {
    if (scheduledTaskQueue == null) {
        scheduledTaskQueue = new DefaultPriorityQueue<ScheduledFutureTask<?>>(
                SCHEDULED_FUTURE_TASK_COMPARATOR,
                // Use same initial capacity as java.util.PriorityQueue
                11);
    }
    return scheduledTaskQueue;
}

可以看到scheduledTaskQueue这个变量是netty自己的实现的。
然后我这里非常好奇,netty为啥要实现一个优先级队列,直接用java原生的不好吗?

回复
阅读 423
1 个回答

Java 内置的 PriorityQueue 是 JDK 1.5 才提供的,而 JDK 1.5 的发布时间比 Netty 还要晚三个多月……你这等于是问“爹为啥长的不像儿”……

另外早年 JDK 里很多内置的容器都有性能问题,直到 JDK 1.8 后才陆续解决(话说 Java8 里还是提升了不少性能指标的),所以你会注意到早年的库很多都会自己搞一套这玩意儿。而 Netty 这种流行库出于兼容性考虑也不会一下子就都换掉的。

宣传栏