起航学习网

- 让每个人都能学到最前沿新知识、新技能!
起航学习网
当前位置: 起航学习网 > 短期培训 > 编程语言 > 郑州达内告诉你学习java线程池的几个特点

郑州达内告诉你学习java线程池的几个特点

时间:2017-12-25 14:10:42来源:Java培训网 作者:IT培训网 已有: 名学员访问该课程

前言:无论是闲置还是工作中,永远都不会销毁的线程,会一直在线程池中存在,那我们是不是永远都奈何不了它呢,当然不会,把ThreadPoolExecutor的allowCoreThreadTimeOut这个属性设置为true,超过规定时长也会销毁

郑州达内为你深入解析Java线程精进之线程池进阶,对于java的知识是无穷限的,想要学好java也没有那么容易,除非我们是真正的java爱好者,愿意为之努力学习钻研,否则想要成功太难了!

今天,达内郑州校区来教大家如何玩转线程池。首先,取出来一“条”线程,用完后再扔回去,再取出来,再扔....

对于Java线程池,达内总结了以下特点:

1.避免大量的创建和销毁带来的性能开销

2.避免大量的线程间因互相抢占系统资源导致的阻塞现象。

3.能够对线程进行简单的管理并提供定时执行、间隔执行等功能。

另外,达内还总结了一些关于线程池的缺点,如下:

1.占用一定的内存空间。

2.线程越多CPU的调度开销越大。

3.程序的复杂度会上升。

其次,达内还总结了线程池的基本使用方法

使用线程池,肯定要对“池”进行配置,像基本的池多大啊,能容纳多少鱼,这些是需要建造前就要确定的.

• int corePoolSize核心线程最大数

无论是闲置还是工作中,永远都不会销毁的线程,会一直在线程池中存在,那我们是不是永远都奈何不了它呢,当然不会,把ThreadPoolExecutor的allowCoreThreadTimeOut这个属性设置为true,超过规定时长也会销毁

• int maximumPoolSize线程总数最大值

就是我们所有的线程,包括非核心的和上边讲的核心的

• long keepAliveTime

如果不是核心线程,超过这个参数的时间就会被干掉

• TimeUnit unit

时间总是有单位的,就是上边KeepAliveTime的时间参数.

类型时枚举,这里举几种常用的,需要时候IDEA会提示

SECONDS : 秒

MINUTES : 分

HOURS : 小时

DAYS : 天

• BlockingQueue workQueue

队列内容较多,我们下边单独讲

ThreadFactory threadFactory

这个一般不用,没必要管

• RejectedExecutionHandler handler

如果执行的过程中,抛异常了,我们可以用这个来指定,但是系统有默认的,因此这个也可以不用

使用线程池当然离不开Executor这个接口,具体的实现类在ThreadPoolExecutor中,so我们简单来了解下这个类

//使用的就是这几个构造,参数我们上边已经讲过了

public class ThreadPoolExecutor extends AbstractExecutorService {

.....

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueueworkQueue);

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueueworkQueue,ThreadFactory threadFactory);

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueueworkQueue,RejectedExecutionHandler handler);

public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueueworkQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler);

...

}

接下来,达内还为大家整理了常用的几种线程池

线程都池都是是使用Executors这个类创建出来的

• CachedThreadPool()

可缓存线程池:

线程数无限制

优先使用空闲线程,如果没有才新建线程

//创建方式

ExecutorService cachedThreadPool = Executors.newCachedThreadPool();

//源码中的定义

public static ExecutorService newCachedThreadPool() {

return new ThreadPoolExecutor(0, Integer.MAX_VALUE,

60L, TimeUnit.SECONDS,

new SynchronousQueue());

}

• FixedThreadPool()

固定长度的线程池

可以控制线程的数量

如果超过则必须排队执行

//创建方式

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(线程数量);

//源码中的定义

public static ExecutorService newFixedThreadPool(int nThreads) {

return new ThreadPoolExecutor(nThreads, nThreads,

0L, TimeUnit.MILLISECONDS,

new LinkedBlockingQueue());

}

• ScheduledThreadPool()

对,就是它可以定时

//创建方法

ExecutorService scheduledThreadPool = Executors.newScheduledThreadPool(最大线程数);

//源码中的定义

public static ScheduledExecutorService newScheduledThreadPool(int corePoolSize) {

return new ScheduledThreadPoolExecutor(corePoolSize);

}

public ScheduledThreadPoolExecutor(int corePoolSize) {

super (corePoolSize, Integer.MAX_VALUE,

DEFAULT_KEEPALIVE_MILLIS, MILLISECONDS,

new DelayedWorkQueue());

}

• SingleThreadExecutor()

所有任务排队执行,一次只能执行一个任务

//创建方法

ExecutorService singleThreadPool = Executors.newSingleThreadPool();

//源码中的定义

public static ExecutorService newSingleThreadExecutor() {

return new FinalizableDelegatedExecutorService

(new ThreadPoolExecutor(1, 1,

0L, TimeUnit.MILLISECONDS,

new LinkedBlockingQueue()));

最后,达内为大家简单介绍下队列

队列类似我们的集合,实现了Collection接口

队列中排队执行的是我们runnable对象

常用的队列有如下几种

• SynchronousQueue:

有任务来就执行交给空闲线程,如果没有就新建线程执行,so线程数设置尽可能大即Integer.MAX_VALUE

• LinkedBlockingQueue:

永远在核心线程内使用线程,如果超过了核心的线程就在队列中等待执行

• ArrayBlockingQueue:

优先使用核心线程数,其次使用非核心的,如果用完了就进入队列等待

• DelayQueue:

想进入队列必须实现Delayed接口,达到指定时间后,方可执行任务

文章出自:http://qh.itpxw.cn/peixun/software/201737806.html

文章标题:郑州达内告诉你学习java线程池的几个特点



免责声明:本站文章均由入驻起航学习网的会员所发或者网络转载,所述观点仅代表作者本人,不代表起航学习网立场。如有侵权或者其他问题,请联系举报,必删。侵权投诉

(责任编辑:IT培训网)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
培训学校
IT培训网 访问该机构站点 报名留言 加为好友 用户等级:注册会员 用户级别:10 机构名称:IT培训网 联 系 人:罗老师 联系电话:13783581536 联系手机:13783581536 在线客服:起航学习网客服 在 线 QQ:起航学习网客服 电子邮件: 网站域名:http://www.itpxw.cn 注册时间:2016-07-18 11:07 最后登录:2024-02-20 13:02
推荐内容