欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

常见问题之线程池

程序员文章站 2022-06-09 21:10:09
...
  • 为什么要用线程池
    1.降低资源消耗:通过重用已经创建的线程来降低线程创建和销毁的消耗
    2.提高响应速度:任务到达时不需要等待线程创建就可以立即执行
    3.提高线程的可管理性:线程池可以统一管理、分配、调优和监控

  • 线程的四种创建方式
    1.Executors.newFixedThreadPool 创建一个coreSize=maxSize=n的线程池,每个线程不限制空闲时间,一直阻塞等待任务(LinkedBlockingQueue)
    2. Executors.newCachedThreadPool 创建一个coreSize=0, maxSize=Integer.MAX_VALUE, 每个线程最大空闲时间不能超过60s,否则强制退出(SynchronousQueue)
    3. Executors.newSingleThreadExecutor 创建一个coreSize=maxSize=1的线程池,每个线程不限制空闲时间,一直阻塞等待任务,不存在并发,保证任务有序执行完(LinkedBlockingQueue)
    4. Executors.newScheduledThreadPool 创建一个coreSize=0, maxSize=Integer.MAX_VALUE,每个线程空闲时间设置0,否则强制退出(DelayedWorkQueue)

  • 线程池的重要参数
    1.allowCoreThreadTimeOut 指定核心线程是否允许超时,非核心线程写死在代码里面一定是有空闲时间限制的

    boolean timed = allowCoreThreadTimeOut || wc > corePoolSize;
    

    2 .keepAliveTime 指定核心线程或者非核心线程的最大空闲时间
    3.corePoolSize 指定核心线程数量
    4.maximumPoolSize 指定最大线程数量
    5.RejectedExecutionHandler 指定使用的拒绝策略(AbortPolicy,DiscardPolicy,DiscardOldestPolicy,CallerRunsPolicy)
    6.ThreadFactory 指定创建线程的工厂实现

相关标签: 常见面试题