zoukankan      html  css  js  c++  java
  • java线程池

    线程池 可以看看这里https://zhuanlan.zhihu.com/p/60986630

    线程 --是调度cpu的最小单位

    两种线程

    1 .ULT  用户级线程

     举例,用户常用的app如qq wps等就是自己在管理自己的程序,windows linux对ULT毫无感知,即(线程给app自己管理)

    2 KLT 内核线程

     即系统或内核自己管理

     他们的线程表放的位置也不团

    然后可以点击这里看看线程的代码

    https://www.cnblogs.com/yangj-Blog/p/12967210.html

    ====================================================

    而线程池是什么

    可以理解为线程缓存

    在Java中,线程池的概念是Executor这个接口,具体实现为ThreadPoolExecutor类,学习Java中的线程池,就可以直接学习他

    对线程池的配置,就是对ThreadPoolExecutor构造函数的参数的配置,既然这些参数这么重要,就来看看构造函数的各个参数吧

    ThreadPoolExecutor提供了四个构造函数

    //五个参数的构造函数
    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue)
    
    //六个参数的构造函数-1
    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory)
    
    //六个参数的构造函数-2
    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              RejectedExecutionHandler handler)
    
    //七个参数的构造函数
    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)
    这里面int corePoolSize => 该线程池中核心线程数最大值
    int maximumPoolSize该线程池中线程总数最大值
    long keepAliveTime该线程池中非核心线程闲置超时时长
    TimeUnit unit为keepAliveTime的单位
    BlockingQueue<Runnable> workQueue该线程池中的任务队列:维护着等待执行的Runnable对象
    ThreadFactory threadFactory创建线程的方式
    RejectedExecutionHandler handler抛出异常专用的
    然后我们就可以自己手动来创建线程池如下

    然后参照对比下面的图片

     

    线程池原理

     不过上面的只是理解原理,总结就是

    事先准备好一些资源,有人要用就拿我这里拿,用完还给我,下一个人再来拿

    比如我事先准备两个,那就是默认大小2,那我最高能支持多少个那就是max,拿不下了就是阻塞,再不行就异常

    我们一般用工具类Executors创建线程池

    我们在idea中搜索Executors就可以看到里面封装的初始化啊方法等。调用即可。

    而它这个工具类有三大方法

    1 newSingleThreadExecutor单个线程

    2newFixedThreadPool就是固定的线程池大小

    3newCachedThreadPool就是可伸缩的,能强能弱

     看看第一个举例,单个线程

      

     运行可以发现都被一个线程创建

     运行第二个方法,发现最多可以5个线程执行

     再看看第三个 ,可伸缩的

    发现是遇强则强,遇弱则弱

  • 相关阅读:
    Linux定时任务调度
    Linux组管理和权限管理
    Linux压缩和解压缩类指令
    leetcode:Compare Version Numbers
    leetcode:Valid Palindrome
    Majority Element
    Min Stack
    leetcode:Intersection of Two Linked Lists(两个链表的交叉点)
    leetcode:Factorial Trailing Zeroes
    leetcode:Rotate Array
  • 原文地址:https://www.cnblogs.com/yangj-Blog/p/13118694.html
Copyright © 2011-2022 走看看