Thread
- start
- 启动线程,接下来会调用run方法
- join
- 等待a线程完成后再继续b线程的工作,本质是wait and notify 机制
- yield
- 让出这次cpu执行时间,等待下一次调度
- interrupt
- 设置一个interupt flag 在代码中需通过isInterrupt() 判断是否中断
sleep
-
线程池
构造方法参数详解
- int corePoolSize 核心线程数数量
- int maximumPoolSize, 最大线程数,corePoolSize满了后会创建非核心线程,创建的数量不会超过此值
- long keepAliveTime,非核心线程的生存时间
- TimeUnit unit, 单位
- BlockingQueue workQueue, 任务队列,当核心线程数满了后会加入到任务队列中,当任务队列满了后会将任务交给非核心线程来处理
- ThreadFactory threadFactory, 设置通用的thread 参数,异常处理等等
- RejectedExecutionHandler handler 拒绝策略
执行流程
线程池拒绝策略
当核心线程满了,任务队列也满了,最大线程数也达到限制了,就会执行拒绝策略
- AbortPolicy
- 抛出异常 RejectedExecutionException ,不处理
- DiscardPolicy
- 不做任何事情
- DiscardOldestPolicy
- 移除队列头,执行当前任务
CallerRunsPolicy
newSingleThreadExecutor
- 单线程,适合串行执行,任务队列是LinkedBlockingQueue 如果任务量过大的话会导致OOM
- newFixedThreadPool
- 适用于处理CPU密集型的任务,确保CPU在长期被工作线程使用的情况下,尽可能的少的分配线程,即适用执行长期的任务。
- newScheduledThreadPool
- 适合执行定时任务
- newCachedThreadPoo
- 适合并发周期短的任务