首页 > 解决方案 > java.util.Timer 中 timer.schedule() 队列的池大小是多少

问题描述

可以安排多少任务稍后调用?对此有任何限制吗?我看不到任何地方指定的最大限制。示例:我可以安排 1000000 个任务在 10 小时后执行吗?我将安排它们只是为了在执行任务之前通过将它们添加到队列中来延迟。

标签: javatimertimeoutthreadpooljava-threads

解决方案


从理论上讲,您可以安排无限数量的TimerTasks -Timer将任务存储在一个TimerTask数组中,如果它填满,该数组的大小会加倍(https://github.com/AdoptOpenJDK/openjdk-jdk8u/blob/master/jdk/src/共享/类/java/util/Timer.java#L596)。

但请注意, aTimer仅使用一个后台线程来执行所有计划任务(https://docs.oracle.com/javase/8/docs/api/index.html?javax/swing/Timer.html):

对应于每个 Timer 对象的是单个后台线程,用于按顺序执行所有计时器的任务。

因此,如果您安排数千个任务同时运行,它们将按顺序执行。


推荐阅读