`
xly_971223
  • 浏览: 1283634 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jdk5的线程池

阅读更多
接上篇 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
分享到:
评论
2 楼 xly_971223 2007-07-25  
liangguanhui 写道
1、jdk5的线程池部分好像不是sun自己开发的
2、其实很容易理解为什么直接用一个Runnable,我觉得作多一个接口反而不好。

我一看到Runnbale这个接口的时候 误认为是Thread,郁闷了好长时间才搞清除
1 楼 liangguanhui 2007-07-25  
1、jdk5的线程池部分好像不是sun自己开发的
2、其实很容易理解为什么直接用一个Runnable,我觉得作多一个接口反而不好。

相关推荐

    JDK自带线程池分析

    JDK自带线程池分析 JDK 自带线程池是 Java 语言中用于管理和执行线程的工具,旨在提高多线程编程的效率和灵活性。本文将详细介绍 JDK 自带线程池的组成、创建方法、优点和常见应用场景。 多线程技术 多线程技术是...

    jdk自带线程池实例详解

    jdk自带线程池实例详解 jdk自带的线程池是Java开发中一个非常重要的概念,特别是在多线程编程中。线程池是线程的容器,每次只执行额定数量的线程,线程池就是用来管理这些额定数量的线程。下面我们来详细了解jdk...

    JDK1.5线程池源码及详细注释

    JDK 1.5引入了java.util.concurrent包,其中包含了线程池的实现,使得并发编程更加便捷和高效。线程池的核心在于它的设计策略,包括核心线程数、最大线程数、线程存活时间、工作队列以及拒绝策略。 线程池的主要类...

    jdk1.5线程池讲解

    JDK1.5的线程池讲解,示例代码,很精辟~

    JDK1.5线程池

    资源很不错

    通用多线程模块(jdk线程池的运用)

    介绍一个通用多线程服务模块。是利用jdk线程池,多线程并行处理多任务,以提高执行效率。

    JDK1.5中的线程池

    JDK1.5中的线程池(ThreadPoolExecutor)使用简介

    JDK线程池和Spring线程池的使用实例解析

    JDK线程池和Spring线程池的使用实例解析 JDK线程池和Spring线程池是两种常用的线程池实现,它们都提供了线程池的功能,但它们在使用和配置上有所不同。下面我们将详细介绍JDK线程池和Spring线程池的使用实例解析。 ...

    自定义实现Java线程池1-模拟jdk线程池执行流程1

    本篇将探讨如何模拟Java的JDK线程池执行流程,以理解其设计原理。核心知识点包括线程池的执行策略、接口设计以及异常处理。 首先,Java中的线程池设计始于JDK 5.0,主要通过`java.util.concurrent`包中的`Executor`...

    jdk1.5+线程池应用

    使用jdk1.5 实现的线程池. 可以定制人物和其它特性. 下载后可以自己进行相关功能完善. 欢迎加QQ:934547801一起讨论

    JDK7多线程部分类(接口)关系图

    JDK7多线程部分类(接口)关系图,根据官网得出

    JDK1.4使用线程池

    NULL 博文链接:https://hany.iteye.com/blog/516597

    jdk5.zip

    在并发编程方面,JDK 5添加了java.util.concurrent包,包含了线程池、并发容器和同步工具类等高效并发工具。例如,ExecutorService和Future接口提供了异步执行任务的能力,而ConcurrentHashMap则是一种线程安全的...

    【多线程高并发编程】四 java(jdk1.8)五种线程池,你都知道具体的应用场景吗?

    Java从JDK 1.5版本开始引入了线程池,使得开发者不再需要手动创建和销毁线程,而是通过线程池来管理和复用线程。 1. **什么是线程池?** 线程池是预先创建并维护的一组线程集合。这些线程在需要时被分配给任务执行...

    JDK1[1].5中的线程池(ThreadPoolExecutor)使用简介

    JDK1[1].5中的线程池(ThreadPoolExecutor)使用简介

    JDK1[1].5中的线程池(ThreadPoolExecutor)使用简介.

    corePoolSize: 线程池维护线程的最少数量 maximumPoolSize:线程池维护线程的最大数量 keepAliveTime: 线程池维护线程所允许的空闲时间 unit: 线程池维护线程所允许的空闲时间的单位 workQueue: 线程池所使用的...

    JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用

    "JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用" JDK1.5中的线程池(java.util.concurrent.ThreadPoolExecutor)使用是Java多线程编程中的一种重要概念。随着多线程编程的普及,线程池的使用变得...

    TOMCAT的线程池源码

    本文将围绕Tomcat的线程池源码进行深入剖析,旨在帮助读者理解其内部机制,并对比JDK的线程池,探讨其效率优势。 首先,我们需要了解线程池的基本原理。线程池是一种多线程处理形式,预先创建一定数量的线程,当...

    jdk1.5 线程并发与线程池的使用

    在Java编程语言中,线程并发和线程池是多任务执行的核心概念,尤其是在JDK 1.5及以后的版本中得到了显著增强。线程并发允许程序同时执行多个任务,提高了程序的效率和响应性。线程池是管理线程资源的有效方式,通过...

Global site tag (gtag.js) - Google Analytics