Thread

  1. start
    1. 启动线程,接下来会调用run方法
  2. join
    1. 等待a线程完成后再继续b线程的工作,本质是wait and notify 机制
  3. yield
    1. 让出这次cpu执行时间,等待下一次调度
  4. interrupt
    1. 设置一个interupt flag 在代码中需通过isInterrupt() 判断是否中断
  5. sleep

    1. 休眠,但是不会释放锁,wait 会释放锁

      Runnable Callable

  6. runnable 没有返回值,callable 有返回值

    线程池

  7. 构造方法参数详解

    1. int corePoolSize 核心线程数数量
    2. int maximumPoolSize, 最大线程数,corePoolSize满了后会创建非核心线程,创建的数量不会超过此值
    3. long keepAliveTime,非核心线程的生存时间
    4. TimeUnit unit, 单位
    5. BlockingQueue workQueue, 任务队列,当核心线程数满了后会加入到任务队列中,当任务队列满了后会将任务交给非核心线程来处理
    6. ThreadFactory threadFactory, 设置通用的thread 参数,异常处理等等
    7. RejectedExecutionHandler handler 拒绝策略

执行流程

16bca03a5a6fd78f.png

线程池拒绝策略

当核心线程满了,任务队列也满了,最大线程数也达到限制了,就会执行拒绝策略

  1. AbortPolicy
    1. 抛出异常 RejectedExecutionException ,不处理
  2. DiscardPolicy
    1. 不做任何事情
  3. DiscardOldestPolicy
    1. 移除队列头,执行当前任务
  4. CallerRunsPolicy

    1. 在调用者线程调用runnable.run()

      自带Executors 使用

  5. newSingleThreadExecutor

    1. 单线程,适合串行执行,任务队列是LinkedBlockingQueue 如果任务量过大的话会导致OOM
  6. newFixedThreadPool
    1. 适用于处理CPU密集型的任务,确保CPU在长期被工作线程使用的情况下,尽可能的少的分配线程,即适用执行长期的任务。
  7. newScheduledThreadPool
    1. 适合执行定时任务
  8. newCachedThreadPoo
    1. 适合并发周期短的任务