package com.yz.myapplication;
public class ThreadPoolManager {
private static ThreadPoolManager instance=new ThreadPoolManager();
public static ThreadPoolManager getInstance() {
return instance;
}
//线程池
private ThreadPoolExecutor threadPoolExecutor;
//请求队列
private LinkedBlockingQueue<Future<?>> service=new LinkedBlockingQueue<>();
//初始化
private ThreadPoolManager(){
线程池:
threadPoolExecutor=new ThreadPoolExecutor(4,10,10, TimeUnit.SECONDS,
new ArrayBlockingQueue<Runnable>(4),handler);
threadPoolExecutor.execute(runnable);
}
//以下有线程泄漏问题:第一:为什么线程池中的线程可以复用 :是因为线程池中的线程执行的是Worker的Run方法,而这里面是一个相当于 while(true)的死循环,因此线程永远不会有执行完的那一天
// 第二:为什么不会被回收 — 是因为存在GC ROOT 的引用,所以无法被回收 。 引用如下ThreadPoolExecutor -> Worker -> Thread
// 由于Thread 是 活着的,因此可作为GC ROOT ,所以才会看到 局部线程池ThreadP