并发编程系列文章:
初解线程池:http://ray-yui.iteye.com/blog/2072463
详解线程池:http://ray-yui.iteye.com/blog/2075311
并发数据类型:http://ray-yui.iteye.com/blog/2080454
并发数据结构:http://ray-yui.iteye.com/blog/2084202
volatile:http://ray-yui.iteye.com/blog/2231474
判断线程安全:http://ray-yui.iteye.com/blog/2232931
实现线程安全:http://ray-yui.iteye.com/blog/2234688
什么是线程池:
线程池和对象池链接池一样保存着多个线程对象,为了节省系统在多线程并发时不断创建线程和销毁线程所带来的额外开销.线程池的基本功能就是线程的复用
JDK5线程池:
为了能够更好的控制多线程,JDK5后提供了Executor框架,它是一个现成的线程池实现,帮助开发人员有效的进行线程控制
Executor框架使用:
public class TestMain {
@Test
public void testExecutor() {
Executor threadPool = null;
/*
* 该方法返回一个固定线程数量的线程池,该线程池中的线程数量 是固定不变的,
* 当一个新任务被提交时,若然没有空闲线程,则会暂时存储在一个任务队列中,
* 待有空闲的线程便处理任务队列中的任务
*/
threadPool = Executors.newFixedThreadPool(10);
/*
* 该方法返回一个只有一个线程的线程池,当一个新任务被提交后,
* 会进入任务队列待有空闲线程时即处理任务队列中的任务
*/
threadPool = Executors.newSingleThreadExecutor();
/*
* 该方法返回一个可根据实际任务数量调整线程数量的线程池,
* 该线程池的线程数量是不固定的,若有空闲线程,则会优先处理任务,
* 若所有线程都在执行任务时又有新的任务被提交,则会创建新的线程去处理任务
*/
threadPool = Executors.newCachedThreadPool();
/*
* 每个创建线程池的方法都有ThreadFactory的重载
*/
threadPool = Executors.newFixedThreadPool(10, new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
/*
* 使用ThreadFactory能控制线程产生时的细节操作
*/
Thread thread = new Thread(r);
// 设置为守护线程
thread.setDaemon(true);
// 线程优先级为最高
thread.setPriority(Thread.MAX_PRIORITY);
return thread;
}
});
// 提交一個任务
threadPool.execute(new Runnable() {
@Override
public void run() {
// executor logic
}
});
/*
* 但我们一般使用ExecutorService方便我們操作线程池,
* 通过ExecutorService我们能使用更多的方式操作线程池
*/
/*
* 其实通过Executors创建的线程池返回的都是ExecutorService对象,
* Executor是ExecutorService的父类
*/
ExecutorService service = (ExecutorService) threadPool;
/*
* 提交一个有返回值(计算结果)的任务 温馨提示,若然任务需要返回计算结果,
* 使用service.submit(),若然任务不需要
* 任何返回结果,使用service.execute();
*/
Future<Integer> future = service.submit(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
return 10;
}
});
/*
* 当线程池使用完毕可以使用shutdown关闭线程池,
* shutdown是较为温柔的关闭方式,等待任务执行完毕后才关闭线程池
* 若然想马上关闭,可以使用service.shutdownNow();
*/
service.shutdown();
//更多的API请参考JDK帮助文档
}
}
JDK5后提供了Executor框架方便了开发人员,提供了线程池的实现和简便的API操控线程池,推荐读者在使用多线程时优先使用JDK内置线程池
分享到:
相关推荐
而了解 Java 并发编程以及其中的 JUC(java.util.concurrent)线程池,对于构建高性能、高可伸缩性的应用程序具有重要意义。 多核处理器的出现使得并发执行成为一种重要的优化手段。了解并发编程和线程池的工作原理...
深入理解高并发编程-Java线程池核心技术 全面详解Java线程池核心技术
并发编程之Executor线程池原理与源码解读.pdf
Java并发编程:线程池的使用 - 平凡希 - 博客园平凡希博客园首页联系管理随笔 - 127 文章 - 1 评论 - 94Java并发编程:线程池的使用在前面
23 高并发编程和线程池,教程视频:java中高并发编程和线程池
课程内容包括了JAVA手写线程池,UC线程池API详解,线程安全根因详解,锁与原子类,分布式锁原理与实现方式,并发编程-AQS等等针对性非常强的JAVA编程开发教程,这其中的内容对JAVA开发技能的拔尖,非常的有帮助。...
java并发编程实战pdf 线程与多线程 1.线程 在操作系统中,线程是比进程更小的能够独立运行的基本单位。同时,它也是 CPU 调度的基本单位。线程本身基本上不拥有系统资源,只是拥有一些在运行时 需要用到的系统资源...
本节主要关注在配置和调整线程池时用的高级选项,讲述了任务执行框架的过程中需 要注意的危险。线程复用原理如下:每一个 Thread 的类都有一个 start 方法。 当调用 start 启动线程时 Java 虚拟机会调 用该类的 run...
并发编程之线程与线程池.pptx 内部培训PPT 多线程 线程池
《Java并发编程的艺术》内容涵盖Java并发编程机制的底层实现原理、Java内存模型、Java并发编程基础、Java中的锁、并发容器和框架、原子类、并发工具类、线程池、Executor框架等主题,每个主题都做了深入的讲解,同时...
│ 高并发编程第一阶段35讲、线程池原理与自定义线程池.mp4 │ 高并发编程第一阶段36讲、自定义个简单的线程池并且测试.mp4 │ 高并发编程第一阶段37讲、给线程池增加拒绝策略以及停止方法.mp4 │ 高并发编程第...
课程内容包括了JAVA手写线程池,UC线程池API详解,线程安全根因详解,锁与原子类,分布式锁原理与实现方式,并发编程-AQS等等针对性非常强的JAVA编程开发教程,这其中的内容对JAVA开发技能的拔尖,非常的有帮助。...
并发编程demo测试包含线程池、锁、队列、信号、cas等等
, 《Java并发编程的艺术》内容涵盖Java并发编程机制的底层实现原理、Java内存模型、Java并发编程基础、Java中的锁、并发容器和框架、原子类、并发工具类、线程池、Executor框架等主题,每个主题都做了深入的讲解,...
java并发编程相关总结
《Java并发编程从入门到精通》内容包括并发编程概念,线程,线程安全,线程集合类,线程阀,线程池,Fork/Join,线程、线程池在互联网项目开发的应用,线程监控及线程分析,Android中线程应用。 本书适合Java开发...
1.1 并发简史 1.2 线程的优势 1.2.1 发挥多处理器的强大能力 1.2.2 建模的简单性 1.2.3 异步事件的简化处理 1.2.4 响应更灵敏的用户界面 1.3 线程带来的风险 1.3.1 安全性问题 1.3.2 活跃性问题 1.3.3 ...
Java并发编程相关源码集 包括多任务线程