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.假设队列满了,而且大于最大线程数。那么抛异常。
当线程闲来无事时,超过了回收时间,而且线程池数量大于核心数量。那么就回收,直到回到核心线程数量
Java 线程池ThreadPoolExecutor简单应用的更多相关文章
- Java线程池ThreadPoolExecutor使用和分析(三) - 终止线程池原理
		相关文章目录: Java线程池ThreadPoolExecutor使用和分析(一) Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理 Java线程池Thr ... 
- Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理
		相关文章目录: Java线程池ThreadPoolExecutor使用和分析(一) Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理 Java线程池Thr ... 
- Java线程池ThreadPoolExecutor使用和分析(一)
		相关文章目录: Java线程池ThreadPoolExecutor使用和分析(一) Java线程池ThreadPoolExecutor使用和分析(二) - execute()原理 Java线程池Thr ... 
- Java线程池ThreadPoolExecutor类源码分析
		前面我们在java线程池ThreadPoolExecutor类使用详解中对ThreadPoolExector线程池类的使用进行了详细阐述,这篇文章我们对其具体的源码进行一下分析和总结: 首先我们看下T ... 
- java线程池ThreadPoolExecutor使用简介
		一.简介线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为:ThreadPoolExecutor(int corePoolSize, int m ... 
- Java 线程池(ThreadPoolExecutor)原理分析与使用
		在我们的开发中"池"的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 使用线程池的好处 1.降低资源消耗 可以重复利用 ... 
- Java 线程池(ThreadPoolExecutor)原理解析
		在我们的开发中“池”的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 有关java线程技术文章还可以推荐阅读:<关于java多线程w ... 
- Java线程池(ThreadPoolExecutor)原理分析与使用
		在我们的开发中"池"的概念并不罕见,有数据库连接池.线程池.对象池.常量池等等.下面我们主要针对线程池来一步一步揭开线程池的面纱. 使用线程池的好处 1.降低资源消耗 可以重复利用 ... 
- java线程池ThreadPoolExecutor的使用
		package s.b.foo.caze.thread; import java.io.Serializable; import java.util.concurrent.ArrayBlockingQ ... 
随机推荐
- PHP cannoy modify header information - headers already sent by ....
			我采用的是MVC模式的写法,代码和html分离的写法 <?php require '../mysql_connect.php'; require('../model/functions.php' ... 
- c标准库 徐明远 背景基础
			背景基础 1.c语言库用c语言编写 其他语言则不同 早期语言的库是用汇编语言编写的 不同的计算机体系结构有不同的汇编语言 所以在移植性方面差一点 而c语言可以编写出高度可移植性的代码 ... 
- MySQL5.7 MTS work线程stack
			复制现象是,slave线程状态正常,但是sql 线程不应用,所以delay越来越大,查看复制状态 mysql> show slave status\G********************** ... 
- iOS中的过滤器和正则表达式(NSPredicate,NSRegularExpression)
			参考链接:http://www.cocoachina.com/industry/20140321/8024.html NSPredicate Cocoa提供了一个NSPredicate类,它用来指定过 ... 
- Codeforces Round #267 (Div. 2)  C. George and Job (dp)
			wa哭了,,t哭了,,还是看了题解... 8170436 2014-10-11 06:41:51 njczy2010 C - George and Jo ... 
- Post Content_Length exceeds the limit
			2017.12,公司市场专员反馈我在公司开发与维护的iOS包内审系统在上传ipa包文件的时候报错了.经过调试发现原来是因为上传的文件太大导致报错(由下图可知,接收方允许的最大请求内容为128M,但我们 ... 
- hdu 4849
			简单题,公式计算+最短路.注意点:注意1 取模,2 数组开到n*n+n. #include<iostream> #include<queue> using namespace ... 
- 【WEB基础】HTML & CSS 基础入门(5)边框与背景
			前面(HTML图片) 漂亮的网页肯定少不了边框与背景的修饰,本篇笔记就是说明如何为网页上的元素设置边框或者背景(背景颜色和背景图片). 之前,先了解一下HTML中的图片元素,因为图片标签的使用非常简单 ... 
- BZOJ——1720: [Usaco2006 Jan]Corral the Cows 奶牛围栏
			http://www.lydsy.com/JudgeOnline/problem.php?id=1720 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 1 ... 
- digits
			Digits(digits.cpp/c/pas)Description给一个关于x的多项式,并给定一个x,求该多项式在带入该x时的值最后k位数字.Input第一行两个整数n.k:之后的 行,每行两个数 ... 
