Java中对线程池提供了很好的支持,有了线程池,我们就不需要自已再去创建线程。如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。JAVA的线程池中的线程可以在执行完任务后,不销毁,继续执行其他的任务。所以了解Java的线程池对我们掌握并发编程是很有帮助的。
先看一下线程池框架Executors涉及到的核心类。 Executor:父类,官方表述为用来解耦任务的提交,可以自已实现,比如调用线程执行该任务,或者起一个新的线程执行该任务 ExecutorService:比父类Executor定义了更多的接口用来提交、管理、终止任务 AbstractExecutorService:提供了ExecutorService默认实现 下面我就从Executors这个多线程框架开始讲起,首先看一下Executors中主要的方法 ThreadPoolExecutor:比AbstractExecutorService提供更多的功能,特别是大量的线程创建,销毁。在性能上更优越。 Executors:工厂类,提供了几个核心创建线程池的方法。 Executors核心方法 public static ExecutorService newFixedThreadPool(int nThreads) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); } public static ExecutorService newFixedThreadPool(int nThreads, ThreadFactory threadFactory) { return new ThreadPoolExecutor(nThreads, nThreads, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(), threadFactory); } public static ExecutorService newSingleThreadExecutor() { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>())); } public static ExecutorService newSingleThreadExecutor(ThreadFactory threadFactory) { return new FinalizableDelegatedExecutorService (new ThreadPoolExecutor(1, 1, 0L, TimeUnit....