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

开天门
  • 15

我在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原生的不好吗?

回复
阅读 281
1 个回答

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

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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏