重温java知识(三十九、JUC并发编程之八:线程池之概念)

多线程技术的出现大大提升了程序的处理性能,但是过多的线程一定会带来线程资源调度的损耗(例如:线程的创建与回收),这样就会导致程序的响应速度变慢。为了实现合理的线程操作,就需要提高线程的可管理型,并且降低资源损耗,所i有在JUC中提供了线程池的概念。线程池的创建可以通过java.util.concurrent.Executors类完成。Executors类能够创建的线程池一共有4种:

  • 缓存线程池(CacheThreadPool):线程池中的每个子线程都可以进行重用,保存了所有的用户线程,并且随着处理量的增加可以持续进行用户线程的创建。
  • 固定大小线程池(FixedThreadPool):保存所有的内核线程,这些内核线程可以被不断重用,并且不保留任何的用户线程。
  • 单线程池(SingleThreadPool):只维护一个内核线程,所有执行者依据顺序排队获取线程资源。
  • 定时调度池(ScheduleThreadPool):按照计划周期性地完成线程中的任务,包含内核线程与用户线程,可以提供有许多的用户线程。

多线程的实现本身依赖于操作系统,但同时也依赖于所使用的平台。例如:JDK最初发展的时候只有单核CPU,所以当时就依赖于软件平台实现。用户线程和内核的区别如下:

  • 用户线程可以在不支持多线程的系统中存在,内核线程需要操作系统与硬件系统的支持。
  • 在只有用户线程的系统中,CPU调度依然以进程为单位,处于运行进程中的多个线程是通过程序实现轮换执行;而在内核支持的多线程系统中,CPU调度以线程为单位,并由操作系统调度。
  • 用户线程通过进程划分,一个进程系统只会为其分配一个处理器,所以用户线程无法调用系统的多核处理器,而内核线程可以调度一个程序在多核处理器上执行,提高处理性能。
  • 用户线程执行系统指令调度时将导致其所属进程被中断,而内核线程执行系统指令调用时,只导致该线程被中断。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值