java并发编程-JUC之线程池概述

概述:

    在多线程编程中,任务都是一些抽象且离散的工作单元,而线程是使任务异步执行的基本机制。随着应用的扩张,线程和任务管理也变得非常复杂,为了简化这些复杂的线程管理模式,我们需要一个“管理者”来统一管理线程及任务分配,这就是线程池。同时可以根据系统的环境,手动设置线程的数量,让运行效果达到最佳。

1.JUC下的线程池框架结构

    jdk里面的线程池的顶级接口是Executor,但是从严格意义上讲,它不是一个线程池,而是一个执行器,一个执行线程的工具,因为 它并没有提供或者定义怎样 管理线程和创建线程。如图所示,为Executor的定义:
这里写图片描述

    在Java中,真正的线程池接口的是ExeutorServiee,如下图,为JUC下的线程池UML图,大概展示了java体系下的线程池的层次。
这里写图片描述
    上图中,ScheduledExecutorService提供周期性的任务执行调度实现。而ThreadPoolExecutor 则 为Java体系下的线程池的具体实现。ForkJoinPool,jDK1.7加入的成员,也是线程池的一种。只允许执行 ForkJoinTask 任务,它是为那些能够被递归地拆解成子任务的工作类型量身设计的。其目的在于能够使用所有可用的运算资源来提升应用性能。

2.ThreadFactory:

JDK中的介绍: An object that creates new threads on demand. Using thread factories removes hardwiring of calls tonew Thread, enabling applications to use special thread subclasses, priorities, etc.
    简而言之。ThreadFactory避免了我们创建线程繁琐 重复的步骤,同时也也可以自己设置一组线程的共有的特性。如优先级,ThreadFactory接口很简单,源码如下:
这里写图片描述
    在JUC包中,Executors提供了一个默认的线程工厂的具体实现。
这里写图片描述
    分析源码可得,在DefaultThreadFactory获得的线程,每个线程具有统一的优先级和名字前缀而且都为前台线程

3.Executors——线程池工厂类:

上面提到 ThreadFactory,它是 一个线程工厂类。 而Executors则是 线程池工厂,它提供了如下几中常见的获得 线程池的方法:
newFixedThreadPool:创建固定大小的线程池。
newSingleThreadExecutor:单任务线程池,即线程池中仅仅只有 一个线程
newCachedThreadPool:线程 池 中的线程数是 可 变的 ,即池中的核心线程数为0,最大线程数 为默认最大值(2的31次方)。
newScheduledThreadPool:它可以在给定的延迟时间后执行命令,或者定期执行命令,它比Timer更强大更灵活。

对于计算密集型的任务,在拥有N个cpu的系统上,当线程池的大小为N+1时,通常能实现最优利用率;对于I/O密集型,通常线程池大小为2*N。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值