本文共 2028 字,大约阅读时间需要 6 分钟。
在HotSpot虚拟机中,Java中的线程将会被一一映射为操作系统的线程。 在Java虚拟机层面,用户将多个任务提交给Executor框架,Executor负责分配线程执行它们; 在操作系统层面,操作系统再将这些线程分配给处理器执行。
Executor框架中的所有类可以分成三类:
任务执行器
Executor框架最核心的接口是Executor,它表示任务的执行器。 Executor的子接口为ExecutorService。 ExecutorService有两大实现类:ThreadPoolExecutor和ScheduledThreadPoolExecutor。执行结果
Future接口表示异步的执行结果,它的实现类为FutureTask。Executors工厂类可以创建四种类型的线程池,通过Executors.newXXX即可创建。
public static ExecutorService newFixedThreadPool(int nThreads){ return new ThreadPoolExecutor(nThreads,nThreads,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue());}
public static ExecutorService newCachedThreadPool(){ return new ThreadPoolExecutor(0,Integer.MAX_VALUE,60L,TimeUnit.MILLISECONDS,new SynchronousQueue());}
public static ExecutorService newSingleThreadExecutor(){ return new ThreadPoolExecutor(1,1,0L,TimeUnit.MILLISECONDS,new LinkedBlockingQueue());}
它用来处理延时任务或定时任务。
它接收SchduledFutureTask类型的任务,有两种提交任务的方式:
SchduledFutureTask接收的参数:
它采用DelayQueue存储等待的任务
工作线程的执行过程: