程序员Android开发经验谈Android开发

Android:线程池的空闲线程在做什么?

2018-07-23  本文已影响44人  我在等你回复可你没回

线程池的空闲线程在做什么??这个我们通过一个例子看看

抄网上一个例子

import java.util.ArrayList;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class HelloWorld {
    // 核心线程数量
    private static int corePoolSize = 3;
    // 最大线程数量
    private static int maxPoolSize = 5;
    // 线程存活时间:当线程数量超过corePoolSize时,10秒钟空闲即关闭线程
    private static int keepAliveTime = 10000;
    // 缓冲队列
    private static BlockingQueue<Runnable> workQueue = null;
    // 线程池
    private static ThreadPoolExecutor threadPoolExecutor = null;

    static {
        workQueue = new LinkedBlockingQueue<Runnable>(5);
        threadPoolExecutor = new ThreadPoolExecutor(corePoolSize, maxPoolSize, keepAliveTime, TimeUnit.SECONDS,
                workQueue);
    }

  public static void main(String[]agrs)
    {
      try {
          for (int i = 0; i < 10; i++) {
              System.out.println("=========第" + i + "次");
              threadPoolExecutor.execute(new MyTask());
              System.out.println("线程池中正在执行的线程数量:" + threadPoolExecutor.getPoolSize());
              System.out.println("线程池缓存的任务队列数量:" + threadPoolExecutor.getQueue().size());
          }
      } finally {
         // threadPoolExecutor.shutdown();
      }
    }
}

点击执行,然后发现程序还没有退出,这是为何呢?因为线程池中的线程还没有退出罗。那他是在做什么呢?我们打出线程的trace看看。


做什么

可以看到他是在getTask方法wait了,静静地等待任务的到来。这种线程就是空闲线程啦。

上一篇下一篇

猜你喜欢

热点阅读