java 线程池的原理
2018-01-13 21:37
246 查看
频繁地创建线程很浪费资源。线程池的线程可以复用,执行完一个任务后可以执行另一个任务。
corePoolSize:核心池的大小。默认情况下,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中;
maximumPoolSize:线程池最大线程数,这个参数也是一个非常重要的参数,它表示在线程池中最多能创建多少个线程;
keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止。当线程池中的线程数大于corePoolSize时,如果一个线程空闲的时间达到keepAliveTime,则会终止,直到线程池中的线程数不超过corePoolSize。
runState表示当前线程池的状态,它是一个volatile变量用来保证线程之间的可见性;
下面的几个static final变量表示runState可能的几个取值。
当创建线程池后,初始时,线程池处于RUNNING状态;
如果调用了shutdown()方法,则线程池处于SHUTDOWN状态,此时线程池不能够接受新的任务,它会等待所有任务执行完毕;
如果调用了shutdownNow()方法,则线程池处于STOP状态,此时线程池不能接受新的任务,并且会去尝试终止正在执行的任务;
当线程池处于SHUTDOWN或STOP状态,并且所有工作线程已经销毁,任务缓存队列已经清空或执行结束后,线程池被设置为TERMINATED状态。
4种拒绝策略
corePoolSize:核心池的大小。默认情况下,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中;
maximumPoolSize:线程池最大线程数,这个参数也是一个非常重要的参数,它表示在线程池中最多能创建多少个线程;
keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止。当线程池中的线程数大于corePoolSize时,如果一个线程空闲的时间达到keepAliveTime,则会终止,直到线程池中的线程数不超过corePoolSize。
runState表示当前线程池的状态,它是一个volatile变量用来保证线程之间的可见性;
下面的几个static final变量表示runState可能的几个取值。
当创建线程池后,初始时,线程池处于RUNNING状态;
如果调用了shutdown()方法,则线程池处于SHUTDOWN状态,此时线程池不能够接受新的任务,它会等待所有任务执行完毕;
如果调用了shutdownNow()方法,则线程池处于STOP状态,此时线程池不能接受新的任务,并且会去尝试终止正在执行的任务;
当线程池处于SHUTDOWN或STOP状态,并且所有工作线程已经销毁,任务缓存队列已经清空或执行结束后,线程池被设置为TERMINATED状态。
4种拒绝策略
相关文章推荐
- 线程池的原理及java实现
- [分享]Java 线程池的原理与实现
- 他山之石____Java 线程池的原理与实现
- Java - "JUC线程池" ThreadPoolExecutor原理解析
- Java多线程系列--“JUC线程池”05之 线程池原理(四)
- Java 线程池的原理与实现
- Java多线程系列--“JUC线程池”03之 线程池原理(二)
- 我眼中的java线程池实现原理
- Java 多线程线程池 - 线程池原理
- 【转】Java 线程池的原理与实现
- Java 线程池的原理与实现学习(二)
- Java concurrency线程池之线程池原理(三)_动力节点Java学院整理
- <关于并发框架>Java原生线程池原理及Guava与之的补充
- java 线程池底层原理
- Java多线程系列--“JUC线程池”04之 线程池原理(三)
- Java 线程池的原理与实现
- Java并发编程札记-(六)JUC线程池-02ThreadPoolExecutor实现原理
- Java线程池架构原理和源码解析(ThreadPoolExecutor)
- java中的线程池优点以及处理原理
- Java 线程池的原理与实现