码迷,mamicode.com
首页 > 编程语言 > 详细

Java 线程池ThreadPoolExecutor简单应用

时间:2015-07-14 13:45:16      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:线程池

什么是线程池:

线程池就是控制线程的一个池子。用来控制线程数量。

为什么要使用线程池:

1.避免系统重复创建和销毁线程影响运行的时间(创建+销毁>>执行时间时)

2.控制线程数量,线程过多会导致机器运行卡(大约一个线程占用1M空间)

ThreadPoolExecutor构造方法


public ThreadPoolExecutor(int corePoolSize,  int maximumPoolSize, long keepAliveTime, TimeUnit unit,  BlockingQueue<Runnable> workQueue)

参数1:核心线程池大小(标准大小)

参数2:线程池最大大小

参数3:设置多长时间超时回收线程

参数4:是一个枚举,表示 keepAliveTime 的单位

参数5:存放任务的队列


实例

public class ThreadPoolExecutorDemo {
	
	public static void main(String[] args) {
		//LinkedBlockingDeque线程队列大小无限制,不会抛异常
		BlockingQueue<Runnable> queue  = new LinkedBlockingDeque<Runnable>();
		//如果核心线程和最大线程相同,那么该线程是固定大小线程池。
		ThreadPoolExecutor executor = new ThreadPoolExecutor(3, 6, 1, TimeUnit.DAYS, queue);
		for(int i=0;i<20;i++){
			executor.execute(new Runnable() {
				
				@Override
				public void run() {
					try {Thread.sleep(5000);} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName());
				}
			});
		}
		System.out.println("-----------------------------------------------");
		for(int i=0;i<20;i++){
			executor.submit(new Runnable() {
				
				@Override
				public void run() {
					System.out.println(Thread.currentThread().getName());
				}
			});
		}
		executor.shutdown();
	}

}
线程池在执行线程时会做出如下判断:

1.如果线程数小于核心线程,那么创建并执行这个县城

2.如果线程数大于核心线程则放入队列中

3.如果这时队列满了,并且小于最大线程数,那么创建执行这个线程

4.如果队列满了,并且大于最大线程数,那么抛异常。


当线程闲来无事时,超过了回收时间,并且线程池数量大于核心数量,那么就回收,直到回到核心线程数量


版权声明:本文为博主原创文章,未经博主允许不得转载。

Java 线程池ThreadPoolExecutor简单应用

标签:线程池

原文地址:http://blog.csdn.net/u010829905/article/details/46875445

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!