Executor与线程池_ExecutorService与Com
使用线程池的好处
1.降低资源消耗(复用线程) 2.提高响应速度(不需要创建线程) 3.提高线程的可管理性
线程池的几个参数
1.corePoolSize(核心线程池基本大小) 2.maxmumPoolSize(线程池最大线程数)
3.keepAliveTime(线程活动保持时间),4.TimeUnit(线程活动保持时间的单位,day-nanos)
5.runnableTaskQueue(工作队列) ArrayBlockingQueue,LinkedBlockingQueue,SynchronousQueue,PriorityBlockingQueue
6.RejectedExecutionHandler(饱和策咯)
AbortPolicy直接抛出异常,CallerRunsPolicy只用调用者所在线程来运行任务,DiscardOldestPolicy丢弃队列里最近的一个任务,执行当前任务;DiscardPolicy不处理,丢弃
固定线程池,0L,则任务完成后立刻删除,那么仍然需要创建线程,则怎么复用? 还是先判断任务队列没job再丢弃?
线程池流程配置线程池大小: 可通过Runtime.getRuntime().availableProcessors()获得当前CPU数
1.CPU密集型--N(cpu)+1;2.IO密集型--2*N(cpu)
使用线程池不仅可以提高应用的响应时间,还可以避免"java.lang.OutOfMemoryError: unable to create new native thread"之类的错误。
建议设置为有界队列
StackOverflowError是由于当前线程的栈满了 那么二者有什么区别?
线程池监控
taskCount:线程池需要执行的任务数量
completedTaskCount:线程池在运行过程中已完成的任务数量
largestPoolSize:线程池曾创建过的最大线程数量
getPoolSize:线程池的线程数量
getActiveCount:活动的线程数