`
ray_yui
  • 浏览: 220188 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

并发编程 — 初解线程池

    博客分类:
  • Java
阅读更多

并发编程系列文章:
      初解线程池: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内置线程池
25
6
分享到:
评论
6 楼 josico 2014-06-26  
突然发现LZ头像还是可爱的魔人布欧 再顶一个
5 楼 hobo212 2014-06-25  
标记下次看
4 楼 SpringJava 2014-06-18  
期待多线程系列文章
3 楼 josico 2014-05-30  
是系列文章吗?马一个
2 楼 weir2009 2014-05-29  
支持一下,期待
1 楼 uniqueE 2014-05-28  
期待多线程系列文章,支持

相关推荐

    深入理解高并发编程-Java线程池核心技术.rar

    深入理解高并发编程-Java线程池核心技术 全面详解Java线程池核心技术

    java并发编程:juc线程池

    Java并发编程中的JUC线程池是Java程序员必须掌握的关键技术之一,它允许开发者高效地管理并发执行的任务,充分利用多核处理器的性能。线程池的出现解决了在并发环境中线程创建、销毁带来的开销,提高了系统资源的...

    23 高并发编程和线程池

    23 高并发编程和线程池,教程视频:java中高并发编程和线程池

    Java并发编程:线程池的使用 - 平凡希 - 博客园1

    Java并发编程中的线程池是提高系统效率的关键工具,它解决了频繁创建和销毁线程的问题。线程池通过复用已存在的线程来处理任务,从而避免了每次任务执行完毕后销毁线程的开销。在Java中,线程池的核心实现是`java....

    JAVA并发编程实践-线程池-学习笔记

    Java并发编程实践中的线程池是一个关键的概念,它在多线程编程中扮演着至关重要的角色,有效地管理和调度线程资源,以提高系统的性能和效率。线程池通过复用已存在的线程来减少线程的创建和销毁开销,避免了频繁的上...

    阿里专家级并发编程架构师课程 彻底解决JAVA并发编程疑难杂症 JAVA并发编程高级教程

    课程内容包括了JAVA手写线程池,UC线程池API详解,线程安全根因详解,锁与原子类,分布式锁原理与实现方式,并发编程-AQS等等针对性非常强的JAVA编程开发教程,这其中的内容对JAVA开发技能的拔尖,非常的有帮助。...

    深入理解高并发编程-Java线程池核心技术

    在深入理解高并发编程,尤其是Java线程池核心技术时,我们首先要明白线程与多线程的概念。线程是操作系统中的基本调度单元,它比进程更小,且基本不拥有系统资源,主要由程序计数器、寄存器和栈等组成。在同一个进程...

    并发编程之Executor线程池原理与源码解读.pdf

    线程池是并发编程中一个非常重要的概念,它主要用于管理和控制线程资源,提高程序的执行效率和响应速度。本文将详细解读Java中Executor框架的线程池原理和源码,同时探讨线程池的调优和监控方法。 首先,线程池的...

    并发编程之线程与线程池.pptx

    并发编程之线程与线程池.pptx 内部培训PPT 多线程 线程池

    Android开发经验谈:并发编程(线程与线程池)(推荐)

    Android开发经验谈:并发编程(线程与线程池) Android开发中,线程和线程池是两个非常重要的概念。线程是Android开发中的一种基本单位,它可以帮助我们实现并发编程,提高应用程序的性能和响应速度。然而,线程也...

    Java 并发编程实战.pdf

    《Java并发编程实战》这本书是关于Java语言中并发编程技术的经典著作。它详细介绍了如何在Java环境中有效地实现多线程程序和并发控制机制。在Java平台上,由于其本身提供了强大的并发编程支持,因此,掌握并发编程...

    java并发编程实战源码,java并发编程实战pdf,Java

    《Java并发编程实战》是Java并发编程领域的一本经典著作,它深入浅出地介绍了如何在Java平台上进行高效的多线程编程。这本书的源码提供了丰富的示例,可以帮助读者更好地理解书中的理论知识并将其应用到实际项目中。...

    《Java并发编程的艺术》

    《Java并发编程的艺术》内容涵盖Java并发编程机制的底层实现原理、Java内存模型、Java并发编程基础、Java中的锁、并发容器和框架、原子类、并发工具类、线程池、Executor框架等主题,每个主题都做了深入的讲解,同时...

    【并发编程】自定义简单线程池.pdf

    ### 并发编程之自定义简单线程池详解 #### 基本概念与理论基础 **并发编程**是现代软件开发中一个重要的领域,它允许程序中的多个任务同时运行,从而提高系统的响应速度和吞吐量。在并发编程中,涉及到几个基本的...

    java 并发编程的艺术pdf清晰完整版 源码

    《Java并发编程的艺术》这本书是Java开发者深入理解并发编程的重要参考书籍。这本书全面地介绍了Java平台上的并发和多线程编程技术,旨在帮助开发者解决在实际工作中遇到的并发问题,提高程序的性能和可伸缩性。 ...

    火山安卓编程线程池例子

    【标题】"火山安卓编程线程池例子"主要聚焦于Android平台上的多线程编程,尤其是使用火山编程框架实现线程池的示例。在Android应用开发中,线程池是一种有效的管理并发任务的方式,它可以帮助优化系统资源的使用,...

    《java 并发编程实战高清PDF版》

    《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南。这本书旨在帮助开发者理解和掌握在Java环境中创建高效、可扩展且可靠的多线程应用程序的关键技术和实践。它涵盖了从基本概念到高级主题的广泛内容,...

    Java并发编程实战华章专业开发者书库 (Tim Peierls 等 美Brian Goetz).pdf

    《Java并发编程实战》是一本深入探讨Java平台并发编程的权威指南,由Tim Peierls等人与Brian Goetz合著,旨在帮助Java开发者理解和掌握在多线程环境中编写高效、安全的代码。这本书由拥有丰富经验的JDK并发大师及...

    java并发编程2

    Java并发编程是Java开发中的重要领域,特别是在多核处理器和分布式系统中,高效地利用并发可以极大地提升程序的性能和响应速度。以下是对标题和描述中所提及的几个知识点的详细解释: 1. **线程与并发** - **线程*...

Global site tag (gtag.js) - Google Analytics