线程池的分类以及使用方法

使用线程池原因

在多线程的程序中,如果并发的线程数量很多,并且每个线程执行很短的一个功能就结束了,这样一直创建线程就会降低系统的效率,所以就有了线程池,可以看做是装线程的池子,里面的线程可以重复使用,这样就不用一直创建和结束线程,增加了效率.

线程池的工作原理

  • 线程池启动之后,会按照代码的指示创建一条或多条线程,在我们提交任务时,是提交给线程池,而不是某一条线程,当线程池拿到任务时,会在他里面看有没有空闲的线程,如果有,就让这个空闲线程执行任务,如果没有,就让任务等待,知道有空闲线程出现.

线程池的分类

缓存线程池

  • 长度无限制,判断线程池是否存在空闲线程,存在就使用,不存在就创建新的线程然后放进池里使用
  • 格式:ExecutorServise servise = Executors.newCachedThreadPool();
    向线程池中加入任务使用servise.execute(任务对象)来完成

定长线程池

  • 长度在获取线程池对象时指定,跟缓存线程池一样,但是当池内的线程满了之后,就不会再加新线程了,而是会等待有空闲的线程再执行
  • 格式:ExecutorServise servise = Executors.newFixedThreadPool(线程池长度),往线程池加任务也是使用这个方法来完成servise.execute(任务对象)
  • 注意:定长线程池要根据自己系统的资源进行设置

单线程线程池

  • 线程池中只有一个线程,一但线程池创建,就不能添加新的线程,会保证所有的顺序按照优先级顺序执行
  • 创建格式跟缓存线程池一致ExecutorServise sercise = Executors.newSingleThreadExecutor();

周期定长线程池

  • 属性跟定长线程池一样,但是他会定时执行,当某个时机触发时,会自动执行某任务
  • 格式;ScheduledExecutorSrivise servise = Executors.newScheduledThreadPool(线程池长度)
  • 使用方法
    1.定时执行:servise.schedule(线程任务,时长数字,时长单位)这里的时长单位要调用TimeUntile工具类里面的常量来指 定
    2.周期执行:servise.schedule(线程任务,时长数字(延迟执行的时长),周期数字(每次执行的间隔时间),时长数字的单位)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值