首页 > 代码库 > Java多线程之线程池

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()方法来关闭线程。

Java多线程之线程池