接上篇
http://www.iteye.com/post/339894 继续讨论线程池
jdk5也提供了线程池 而且非常简单
ExecutorService pool = Executors.newFixedThreadPool(4); //创建线程池 4个工作线程
pool.execute(new RunnableTask()); //向任务队列添加任务,任务是一个Runnbale的实现类
pool.shutdown();//停止工作线程
看一下 这两句
pool.execute(new RunnableTask()) //RunnableTask implements Runnable
//这句是在上篇文章中
pool.addTask(new SimpleTask(new MyManager(), i)) //SimpleTask implements Task
看出什么不同了吗?
jdk5实现的是Runnble接口 也就是说它的每个任务又是一个线程?是这样吗? 不是
让我们看看是怎么实现的吧
/**
* Run a single task between before/after methods.
*/
private void runTask(Runnable task) {
final ReentrantLock runLock = this.runLock;
runLock.lock();
try {
// Abort now if immediate cancel. Otherwise, we have
// committed to run this task.
if (runState == STOP)
return;
Thread.interrupted(); // clear interrupt status on entry
boolean ran = false;
beforeExecute(thread, task);
try {
task.run(); //调用的是run()方法 而不是start()
ran = true;
afterExecute(task, null);
++completedTasks;
} catch(RuntimeException ex) {
if (!ran)
afterExecute(task, ex);
// Else the exception occurred within
// afterExecute itself in which case we don't
// want to call it again.
throw ex;
}
} finally {
runLock.unlock();
}
}
请注意task.run(); 这句, 这儿并没有启动线程 而是简单的调用了一个普通对象的一个方法
runTask方法是在工作线程(Worker)中调用的
/**
* Worker threads
*/
private class Worker implements Runnable {
//只列出run方法 其他省略
public void run() {
try {
Runnable task = firstTask;
firstTask = null;
while (task != null || (task = getTask()) != null) {
runTask(task); //执行任务
task = null; // unnecessary but can help GC
}
} catch(InterruptedException ie) {
// fall through
} finally {
workerDone(this);
}
}
}
jdk5的开发人员也真够省的,多创建一个任务接口多好理解啊, 非要用Runnable接口 误导我们。
以上的代码片段都节选自jdk5中ThreadPoolExecutor
分享到:
相关推荐
JDK自带线程池分析 JDK 自带线程池是 Java 语言中用于管理和执行线程的工具,旨在提高多线程编程的效率和灵活性。本文将详细介绍 JDK 自带线程池的组成、创建方法、优点和常见应用场景。 多线程技术 多线程技术是...
jdk自带线程池实例详解 jdk自带的线程池是Java开发中一个非常重要的概念,特别是在多线程编程中。线程池是线程的容器,每次只执行额定数量的线程,线程池就是用来管理这些额定数量的线程。下面我们来详细了解jdk...
JDK 1.5引入了java.util.concurrent包,其中包含了线程池的实现,使得并发编程更加便捷和高效。线程池的核心在于它的设计策略,包括核心线程数、最大线程数、线程存活时间、工作队列以及拒绝策略。 线程池的主要类...
JDK1.5的线程池讲解,示例代码,很精辟~
资源很不错
介绍一个通用多线程服务模块。是利用jdk线程池,多线程并行处理多任务,以提高执行效率。
JDK1.5中的线程池(ThreadPoolExecutor)使用简介
JDK线程池和Spring线程池的使用实例解析 JDK线程池和Spring线程池是两种常用的线程池实现,它们都提供了线程池的功能,但它们在使用和配置上有所不同。下面我们将详细介绍JDK线程池和Spring线程池的使用实例解析。 ...
本篇将探讨如何模拟Java的JDK线程池执行流程,以理解其设计原理。核心知识点包括线程池的执行策略、接口设计以及异常处理。 首先,Java中的线程池设计始于JDK 5.0,主要通过`java.util.concurrent`包中的`Executor`...
使用jdk1.5 实现的线程池. 可以定制人物和其它特性. 下载后可以自己进行相关功能完善. 欢迎加QQ:934547801一起讨论
JDK7多线程部分类(接口)关系图,根据官网得出
NULL 博文链接:https://hany.iteye.com/blog/516597
在并发编程方面,JDK 5添加了java.util.concurrent包,包含了线程池、并发容器和同步工具类等高效并发工具。例如,ExecutorService和Future接口提供了异步执行任务的能力,而ConcurrentHashMap则是一种线程安全的...
Java从JDK 1.5版本开始引入了线程池,使得开发者不再需要手动创建和销毁线程,而是通过线程池来管理和复用线程。 1. **什么是线程池?** 线程池是预先创建并维护的一组线程集合。这些线程在需要时被分配给任务执行...
JDK1[1].5中的线程池(ThreadPoolExecutor)使用简介
corePoolSize: 线程池维护线程的最少数量 maximumPoolSize:线程池维护线程的最大数量 keepAliveTime: 线程池维护线程所允许的空闲时间 unit: 线程池维护线程所允许的空闲时间的单位 workQueue: 线程池所使用的...
"JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用" JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用是Java多线程编程中的一种重要概念。随着多线程编程的普及,线程池的使用变得...
本文将围绕Tomcat的线程池源码进行深入剖析,旨在帮助读者理解其内部机制,并对比JDK的线程池,探讨其效率优势。 首先,我们需要了解线程池的基本原理。线程池是一种多线程处理形式,预先创建一定数量的线程,当...
在Java编程语言中,线程并发和线程池是多任务执行的核心概念,尤其是在JDK 1.5及以后的版本中得到了显著增强。线程并发允许程序同时执行多个任务,提高了程序的效率和响应性。线程池是管理线程资源的有效方式,通过...