Java CAS && 线程池简述
Java CAS
synchronized为悲观锁,CAS乐观锁机制
包含三个操作数---内存位置V、预期原值A、和新值B,V和A相等的时候,才会更换成B。
缺点
1、循环时间长,则开销大
2、只能保证一个共享变量原子操作
3、ABA问题,改回去改回来,解决:juc提供了AtomicStampedReference,控制变量值的版本保证CAS的正确性。
Java线程池
降低资源消耗
Java juc提供了五种线程池实现
Fork/Join框架
Work-Stealing算法:某个线程从其他队列中窃取任务执行。
juc的三个executor接口
Executor:运行新任务简单接口,没法处理任务的返回值
ExecutorService:提供了线程池的管理方法,能够处理任务的返回值通过Future
ScheduledExecutorService:支持定期执行任务和Future
线程池生命周期
线程池状态&&线程池有效线程数量,int32位的前3位和后29位分别记录。
大小的选择
CPU密集型:线程数设置为核数+1
I/O密集型:线程数=核数*(1 + 平均等待/平均工作),处理较多的任务
线程池这东西还是多读JDK源码。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通