为何使用JAVA线程池

编程

1 线程分类
    --用户级线程
   用户维护,存在于用户空间;
    --内核线程
   系统内核级线程,存在于内核空间;

    java线程启动,调用库内核调度器,生成的是内核级线程,共享CPU

2 使用线程池优势
    --多线程并发执行时,CPU时间片到了之后,切换上下文耗费资源;
    --线程稀缺资源,避免资源消耗,可以资源复用;
    --减少线程的创建和消亡,提高响应性能;

3 java常用线程池

    Executor  execute方法
    ExecutorService 定义了 shutdown等等具体行为方法
    AbstractExecutorService
    SingleThreadPool 和 newCachedTheadPool 【阿里规约不建议,详情看源码,有缺陷】

   可以通过自己创建的方式,new ThreadPoolExecutor 创建线程池

    核心参数
    corePoolSize  核心处理业务的线程数
    maxinumPoolSize 最大线程数
    keepAliveTime 非核心数线程保持的时长
    Time unit 单位是毫秒还是秒
    workQueue 任务阻塞等待队列BlockingQueue
    RejectExecuttionHandel  拒绝任务策略【丢弃任务抛异常 or  拒绝任务,自己管理执行】

4 线程池状态
    Running 可接受新任务
    Shutdown 不接受新任务,但是处理已添加的任务
    stop 不接受新任务,直接终止处理任务
    tidying 状态
    terminled 阻止线程池,然后消亡

    合理设置线程池的大小
    CPU密集型  频繁计算的,可参考 线程数=CPU核数 N 核 + 1
    I/O密集型  后台异步IO操作,可参考 线程数=CPU核数 N 核*2 + 1

线程池内部工作原理过程如下图:

 

以上是 为何使用JAVA线程池 的全部内容, 来源链接: utcz.com/z/518325.html

回到顶部