Java多线程之线程池
1、什么是线程池?
线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。
2、线程池的优点
使用线程池可以有效控制系统中并发线程的数量,当系统包含大量并发线程时,会导致性能急剧下降,甚至JVM的奔溃,而线程池的最大线程数参数可以控制并发线程数不超过此数。
3、四种线程池
newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执行。
4、线程池的创建
/** * @author baiyangshuxia * @time 2017年7月12日 下午10:15:47 */ package com; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class ThreadPool { public ThreadPool() { // TODO Auto-generated constructor stub } public static void main(String[] args) throws Exception { // TODO Auto-generated method stub ExecutorService pool=Executors.newFixedThreadPool(6); Runnable target=()->{ for(int i=0;i<100;i++){ System.out.println(Thread.currentThread().getName()+"的i的值为:"+i); } }; pool.submit(target); pool.submit(target); pool.shutdown(); } }
5、使用线程池执行线程任务的步骤
(1)调用ececutors类的静态工厂方法创造一个ExecutorsService对象,该对象代表一个线程池。
(2)创建Runnable实现类或者Callable方法类的实例,作为线程执行任务。
(3)调用ExecutorService对象的submit()方法来提交Runnable实例或者Callable实例。
(4)当不想提交任何任务时,调用ExecutorService对象的shutdown()方法来关闭线程。