ThreadPoolExecutor getActiveCount() 为 1 但 getQueue returns 为空队列,为什么?

ThreadPoolExecutor getActiveCount() is 1 but getQueue returns empty queue, why?

ThreadPoolExecutor getActiveCount() 是 1 但 getQueue returns 空队列,为什么?

我有一个类型为 ThreadPoolExecutor 的执行器。

我调用 getActiveCount() 并得到 1,

但是当我调用 getQueue.size() 时,它是 0。

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadPoolExecutor.html#getQueue%28%29

我的代码是这样的。

  System.out.println(taskExecutor.getActiveCount());
  System.out.println(taskExecutor.getThreadPoolExecutor().getQueue().size());

所以我很困惑,为什么这两个不一样?

根据 javadocs(强调我的)

getActiveCount():Returns 近似值 主动 执行任务的线程数。

getQueue(): Returns 任务 queue 被执行者使用。

现在解释... getQueue() returns任务等待执行的队列,一旦任务准备好执行,它从队列中取出并提供给线程。另外,请记住 getActive() returns 是一个近似值,不应在任何类型的逻辑中使用。

所以您的问题有 2 个可能的答案。有一项任务 运行... 或 getActive() 正在返回一个近似值。不管怎样,都没有等待执行的任务。