zoukankan      html  css  js  c++  java
  • 高级线程之线程池

    高级线程之线程池

    1. 线程池产生

    为什么会出现线程池?
    在普通情况下,我们需要创建并启动一个线程,当任务完成时,我们将其销毁,这样存在两个不断重复的过程(创建和销毁)
    解决方案:我们创建一个线程池,当我们需要使用进程时,从进程池中调用一个,使用完时又将其返回线程池中,这样就避免了两个重复的过程

    2. 线程池的分类

    * 固定尺寸线程池
    
    //创建线程池
    ExcutorService tp=Excutor.newFixedThreadPool(N)  //N--线程池的大小(可用线程数目)
    Thread1 a= new Thread1();
    tp.execute(a);    //执行线程
    tp.shutdown();   //关闭线程池
    

    Q:写代码时可以execute超过n个线程吗?
    A:可以,但是由于线程池中只有两个待命线程,所以只有在其中一个线程结束后将其返回线程池才可运行第三个,后面的亦然

    * 可变尺寸线程池
    
    ExcutorService tp=Excutor.newCachedThreadPool();
    Thread1 a=new Thread1();
    tp.execute(a);
    tp.shutdown();
    

    3. 线程池的延迟执行

    //类
    ScheduledExecutorService //实现了时延功能的线程池
    //构造器
    public static ScheduledExecutorService newScheduledThreadPoll(int n)
    public static ScheduledExecutorService newSingleThreadScheduledExecutor()  //顾名思义,单线程线程池
    //API:
    public ScheduledFuture schedule(Runable command,long delay,TimeUnit unit)    //设定线程延迟执行时间
    

    4. 自定义线程池

    //类
    ThreadPoolExecutor
    //构造器
    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,BlockingQueue<Runable> workQueue)
    //需要为这个类的对象指定两个值:标准尺寸和最大尺寸,原因在于线程调度的需要,如果请求线程数在最大值之内,都是原则上允许创建新线程的,如果要超过标准值,一般倾向于将请求放到队列中。
    
  • 相关阅读:
    Java+Selenium元素定位的练习(三)
    Java+Selenium元素定位的八种方法(二)
    Java Selenium3 WebDriver启动火狐、Chrome、IE,Edge浏览器的方法(一)
    iOS userAgent
    如何强制视频横竖屏
    一些在开发中不曾注意的小知识,只是怕以后忘了,有迹可查
    多线程与并发
    谈谈那些年要把你弄疯的 bug
    底部导航上拉出现,下拉消失
    新闻详情页顶部的下拉放大与上拉的层叠效果
  • 原文地址:https://www.cnblogs.com/zsyacm666666/p/6901199.html
Copyright © 2011-2022 走看看