Java并发编程:线程池、ThreadLocal、锁机制与原子操作
需积分: 10 67 浏览量
更新于2024-07-15
收藏 20.35MB DOCX 举报
"该文档是关于Java并发编程的学习笔记,涵盖了线程池、ThreadLocal、锁机制、原子类以及CAS的相关知识。"
一·线程池
线程池是Java并发编程中常用的一种优化手段,通过复用已存在的线程来减少创建和销毁线程的开销。使用线程池可以更好地控制系统的资源,提高系统性能,并且提供了处理拒绝任务的策略。JDK内置了四种线程池:
1. FixedThreadPool:固定大小的线程池,核心线程数等于最大线程数,使用无界链表阻塞队列,可能导致内存溢出(OOM)。
2. CachedThreadPool:可缓存线程池,核心线程数为0,最大线程数为Integer.MAX_VALUE,使用直接交接队列,线程执行完后存活60秒后会被回收。
3. ScheduledThreadPool:支持定时及周期性任务的线程池,适用于计划任务的执行。
4. 比较:不同线程池适用于不同的场景,如FixedThreadPool适合任务量稳定的场景,而CachedThreadPool适合短生命周期的任务。
二·ThreadLocal
ThreadLocal是每个线程独享变量的工具类,常用于避免在多线程环境下传递全局变量。使用ThreadLocal可以简化代码,但需要注意内存泄漏问题,当不再使用ThreadLocal时,应将其设置为null以释放引用。
三·锁
Java提供了多种锁机制,包括Lock接口和synchronized关键字。Lock提供了更细粒度的控制,可以显式地获取和释放锁。锁的分类包括:
1. 乐观锁与悲观锁:乐观锁假设很少发生冲突,通常不加锁;悲观锁则假设冲突频繁,采用加锁机制。
2. 可重入锁:允许一个线程多次获取同一锁,如synchronized。
3. 公平锁与非公平锁:公平锁保证按照请求顺序获取锁,而非公平锁则可能让某些线程提前获取锁。
4. 共享锁和排它锁:读写锁中的读锁是共享的,允许多个读取操作同时进行;写锁是排它的,只有一个写操作能执行。
四·atomic
Java的原子类如AtomicInteger、AtomicLong等提供了一种高效、线程安全的数值操作方式,它们使用CAS(Compare and Swap)技术实现。原子类可以避免使用synchronized进行同步,降低锁的使用开销。AtomicLong与LongAdder、LongAccumulator等累加器类在高并发下表现更优。
五·CAS
CAS是一种无锁算法,通过比较并交换值来实现原子操作。它避免了锁带来的开销,但在高竞争环境下可能导致自旋浪费CPU资源。Java通过AtomicStampedReference解决ABA问题,引入时间戳来确保更新的原子性。
总结,Java并发编程涉及面广,从线程池的管理到线程局部变量的使用,再到各种锁机制和原子类的运用,都是为了在多线程环境中保证数据的一致性和程序的高效运行。理解并熟练掌握这些概念和技术,对于提升Java并发编程能力至关重要。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2022-06-20 上传
2021-07-13 上传
2022-06-26 上传
2024-06-03 上传
2022-11-26 上传
2023-06-14 上传
HAKUNA·MATATA
- 粉丝: 3
- 资源: 3
最新资源
- spring-data-orientdb:SpringData的OrientDB实现
- 施耐德PLC通讯样例.zip昆仑通态触摸屏案例编程源码资料下载
- Sort-Text-by-length-and-alphabetically:EKU的CSC 499作业1
- Resume
- amazon-corretto-crypto-provider:Amazon Corretto加密提供程序是通过标准JCAJCE接口公开的高性能加密实现的集合
- array-buffer-concat:连接数组缓冲区
- api-annotations
- 行业数据-20年春节期间(20年1月份24日-2月份9日)中国消费者线上购买生鲜食材平均每单价格调查.rar
- ex8Loops1
- react-travellers-trollies
- Bootcamp:2021年的训练营
- SpookyHashingAtADistance:纳米服务革命的突破口
- 蛇怪队
- address-semantic-search:基于TF-IDF余弦相似度的地址语义搜索解析匹配服务
- 摩尔斯键盘-项目开发
- Terraria_Macrocosm:空间