博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
并发编程与高并发学习笔记五
阅读量:7106 次
发布时间:2019-06-28

本文共 1387 字,大约阅读时间需要 4 分钟。

线程池 一,new Thread 弊端 每次new Thread新建对象,性能差 线程缺乏统一管理,可能无限制的新建线程,相互竞争,有可能占用过多的系统资源导致死机或OMM 缺少更多功能,如更多执行,定期执行,线程中断 二,线程池的好处 重用存在的线程,减少对象的创建和消亡的开销,新能好 可以有效的控制最大并发线程数,提高系统资源利用率,同时可以避免过多的资源竞争,避免阻塞 提供定时执行,定期执行,单线程,并发数控制等功能 三,相关的类 1.ThreadPoolExecutor 参数: int corePoolSize:核心线程数量 int maximumPoolSize:线程最大线程数 workQueue:阻塞队列,存储等待执行的任务,很重要,会对线程池的运行过程产生重大影响 long keepAliveTime:线程没有执行任务时最多保持多久时间终止 TimeUnit unit:keepAliveTime的时间单位 ThreadFactory threadFactory:线程工厂,用来创建线程 RejectedExecutionHandler handler:当拒绝处理任务时的策略 2.方法: execute():提交任务,交给线程池执行 submit():提交任务,能够返回执行结果 execute+Future shutdown():关闭线程池,等待任务都执行完毕 shutdownNow():关闭线程池,不等待任务执行完 线程监控相关的方法: getTaskCount():线程池已执行和未执行的任务总数 getCompletedTaskCount():已完成的任务数量 getPoolSize():线程池当前线程的数量 getAliveCount():当前线程池中正在执行任务的线程数量 四,线程池的状态 running:可以处理新提交的任务,并且能处理阻塞队列中的任务 shutdown:关闭状态,不能接受新提交的任务,可以处理阻塞队列中的已经保存的任务。当线程池执行running时调用shutdown() 方法时,可以进入这个状态 stop:不接受新的任务,也不能处理阻塞队列中的任务 tidying:如果所有的人物都已经终止了,工作线程数为0,线程池会进入这个状态 terminated:tidying状态调用 terminated()方法后,会进入这个状态 五,Executor框架接口 Executors.newCachedThreadPool:可缓存的线程池 Executors.newFixedThreadPool:定长线程池,可以控制线程的最大并发数,超出的线程会在线程池中等待 Executors.newScheduledThreadPool:定长线程池,支持定时和周期性的任务执行 Executors.newSingleThreadExecutor:单线程化的线程池,他会用唯一的一个工作线程来执行任务,保证任务按指定顺序执行 (指定顺序:比如先进先出,优先级等) 六,使用线程池 七,线程池-合理配置 cpu密集型任务,就需要尽量压榨cpu,参考值可以设置为 NCPU+1 IO密集型任务,参考值可以设置为 2*NCPU

转载于:https://www.cnblogs.com/inspred/p/9520954.html

你可能感兴趣的文章
c/c++ 宏中"#"和"##"的用法
查看>>
Codeforces Perfect Pair (JAVA)
查看>>
自定义Web控件写事件
查看>>
The document has been modified outside of Code Composer. Would you like to reload the file
查看>>
C语言位操作--逻辑运算符组合
查看>>
百度文库、优酷、土豆等网站的几个小窍门
查看>>
2013华为招聘上机--- 字符串处理转换
查看>>
Max retries exceeded with ur
查看>>
c#中WebBrowser控件的使用方法
查看>>
第一版
查看>>
PHP时间比较和时间差如何计算
查看>>
hdu1495(经典bfs,平分水问题)
查看>>
4月27日微软云训练营活动-现场图集
查看>>
[Ubuntu] APT - Advanced Packaging Tool 简明指南
查看>>
PostgreSQL的autovacuum 与 vacuum full
查看>>
2013Hulu校园招聘笔试题
查看>>
每日英语:First Offer: Take It Or Keep Waiting?
查看>>
分析MySQL慢日志(转)
查看>>
Gradle学习系列之三——读懂Gradle语法
查看>>
把1000个随机数写入到文件中
查看>>