Java 线程池ThreadPoolExecutor简单应用

什么是线程池:

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


为什么要使用线程池:

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

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


ThreadPoolExecutor构造方法

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

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

參数2:线程池最大大小

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

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

參数5:存放任务的队列


实例:

public classThreadPoolExecutorDemo {
	
	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(1000);} catch (InterruptedException e) {
						e.printStackTrace();
					}
					System.out.println(Thread.currentThread().getName());
				}
			});
		}
		//有序的关闭,已经关闭的无其它作用
		executor.shutdown();
	}
}



线程池在运行线程时会做出例如以下推断:

1.假设线程数小于核心线程。那么创建并运行这个县城

2.假设线程数大于核心线程则放入队列中

3.假设这时队列满了,而且小于最大线程数,那么创建运行这个线程

4.假设队列满了,而且大于最大线程数。那么抛异常。


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


原文地址:https://www.cnblogs.com/tlnshuju/p/6936522.html