我在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原生的不好吗?
Java 内置的 PriorityQueue 是 JDK 1.5 才提供的,而 JDK 1.5 的发布时间比 Netty 还要晚三个多月……你这等于是问“爹为啥长的不像儿”……
另外早年 JDK 里很多内置的容器都有性能问题,直到 JDK 1.8 后才陆续解决(话说 Java8 里还是提升了不少性能指标的),所以你会注意到早年的库很多都会自己搞一套这玩意儿。而 Netty 这种流行库出于兼容性考虑也不会一下子就都换掉的。