JAVA JDK1.5 线程池
来源:互联网 发布:c语言钩子函数 编辑:程序博客网 时间:2024/05/16 12:50
在多线程并发的条件下,由于系统资源有限,需要限制同时执行的线程的数量,JDK1.5提供了线程池来控制多线程的执行。
JDK1.5中的线程池包含以下三种:
1.newSingleThreadExecutor:创建一个单线程的线程池,这个线程池最多只有一个线程在执行,也就是相当于单线程串行执行
2.newFixedThreadPool:创建固定大小的线程池。每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。线程池的大小一旦达到最大值就会保持不变,如果某个线程因为执行异常而结束,那么线程池会补充一个新线程。
3.newCachedThreadPool:创建一个可缓存的线程池。如果线程池的大小超过了处理任务所需要的线程,那么就会回收部分空闲(60 秒不执行任务)的线程,当任务数增加时,此线程池又可以智能的添加新线程来处理任务。此线程池不会对线程池大小做限制,线程池大小完全依赖于操作系统(或者说JVM)能够创建的最大线程大小。
实际项目中用得最多的线程池是newFixedThreadPool。
线程池中的参数:
corePoolSize: 线程池维护线程的最少数量
maximumPoolSize:线程池维护线程的最大数量
largestPoolSize:线程池同时执行过的最大线程数
activeCount:当前正在执行的线程数量
poolSize :线程池中的线程数
keepAliveTime: 线程池维护线程所允许的空闲时间
unit: 线程池维护线程所允许的空闲时间的单位
queue:线程池中的队列
workQueue: 线程池所使用的缓冲队列
handler: 线程池对拒绝任务的处理策略
taskCount:被加入到线程池的线程数,包括未执行,正在执行和已经执行完成
completedTaskCount:线程池已经执行完的线程数
newFixedThreadPool线程池的例子如下:
public class MyThread implements Runnable {
public void run() {
try {
System.out.println(new Date().toLocaleString());
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class ThreadPoolExample {
private int maxPoolSize = 10;
private ThreadPoolExecutor threadPoolExecutor;
public ThreadPoolExample(){
threadPoolExecutor = (ThreadPoolExecutor) Executors.newFixedThreadPool(maxPoolSize);
}
public void executeThread(Runnable runnable){
threadPoolExecutor.execute(runnable);
}
public void execute(Runnable runnable){
threadPoolExecutor.execute(runnable);
}
public void print(){
System.out.println("ActiveCount="+threadPoolExecutor.getActiveCount());
System.out.println("MaximumPoolSize="+threadPoolExecutor.getMaximumPoolSize());
System.out.println("LargestPoolSize="+threadPoolExecutor.getLargestPoolSize());
System.out.println("CorePoolSize="+threadPoolExecutor.getCorePoolSize());
System.out.println("PoolSize="+threadPoolExecutor.getPoolSize());
System.out.println("QueueSize="+threadPoolExecutor.getQueue().size());
System.out.println("TaskCount="+threadPoolExecutor.getTaskCount());
System.out.println("CompletedTaskCount="+threadPoolExecutor.getCompletedTaskCount());
}
public static void main(String[] args) {
ThreadPoolExample threadPoolExample = new ThreadPoolExample();
for (int i = 0; i < 100; i++) {
threadPoolExample.execute(new MyThread());
}
try {
Thread.sleep(90);
threadPoolExample.print();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
- JAVA JDK1.5 线程池
- Java JDK1.5 线程池使用
- JDK1.5线程池
- 线程池(JDK1.5)
- JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecute
- JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecut
- JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecut
- JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor
- Java--jdk1.5新特性线程池用法
- JDK1.5中的线程池(java.util.concu…
- JDK1.5中的线程池
- JDK1.5中的线程池
- JDK1.5中的线程池
- JDK1.5中的线程池
- Java 线程池机制分析 jdk1.7
- JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用简介,线程邮件发送实例
- JDK1.5中的线程池使用简介
- JDK1.5中线程池的应用。
- 黑马程序员--数组和集合
- Spring Proxool 连接池
- openlaszlo编译的两种方法
- 《谍影重重4:伯恩的遗产》观后感
- probabilistic analysis
- JAVA JDK1.5 线程池
- 基于JDK1.6的Web Service
- Xmanager 连接 centos 远程桌面
- C/C++学习规划与发展指引
- vim + ctags + taglist配置和使用 【及】 一键安装 ctags和cscope的方法 【及】vim语法高亮,自动缩进,python 自动缩进设置
- 成绩单
- 金蝶K3产品环境&行业篇常见问题集锦(一)-(二) -(三)
- Multiset(中)——STL中的multiset
- Maven使用总结