![](https://img-blog.csdnimg.cn/2019092715111047.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
底层原理
文章平均质量分 91
Java相关知识底层原理学习
abcccccccccccccccode
写博客的目的是自我整理和提升!
展开
-
Object类源码学习
基于JDK1.8阅读源码。原创 2023-03-05 20:37:04 · 447 阅读 · 0 评论 -
ConcurrentHashMap源码阅读
使用了一种分段锁的机制,内部维护了一个由Node节点组成的数组,每个节点包含一个键-值对。数组的每个元素称为一个"段",每个段都是一个独立的哈希表,有自己的锁。每个段中的节点使用链表或红黑树来解决哈希冲突。通过使用分段锁(Segment)来实现并发控制。每个段具有自己的锁,不同的段可以独立地进行读写操作,以提高并发性能。这种设计在多线程环境下减少了锁的竞争范围。使用sync数组来存储段的锁。在进行操作之前,首先根据键的哈希值获取对应的段,然后获取该段的锁。原创 2023-03-03 19:36:31 · 231 阅读 · 0 评论 -
HashMap源码学习
HashMap底层原理学习原创 2023-03-01 15:19:31 · 678 阅读 · 0 评论 -
LinkedList源码阅读
基于JDK8。原创 2022-09-06 19:53:28 · 872 阅读 · 3 评论 -
ArrayList源码学习
基于JDK8原创 2022-08-29 19:59:12 · 864 阅读 · 0 评论 -
可重入锁ReentrantLock的原理及使用
在公平模式下,锁会按照线程的请求顺序分配,遵循先进先出的原则。构造方法接受一个可选的公平参数(默认非公平锁),当设置为true时,表示公平锁,否则为非公平锁。公平锁的效率往往没有非公平锁的效率高,在许多线程访问的情况下,公平锁表现出较低的吞吐量。ReentrantLock是一个强大而灵活的同步工具,它提供了更多的控制选项和功能,适用于各种复杂的同步需求。方法,它可以尝试获取锁,如果锁当前不可用,则立即返回结果。,因此在使用时需要谨慎,并确保正确处理锁的获取和释放,以避免死锁和其他并发问题。原创 2022-08-09 09:38:16 · 1444 阅读 · 0 评论 -
AQS的工作机制
AQS(AbstractQueuedSynchronizer)是Java并发编程中的一个重要组件,它提供了一种基于队列的同步机制,用于实现各种同步器,如锁、信号量等。在去修改state状态的时候,使用的CAS自旋锁来保证原子性,确保只能有一个线程修改成功,修改失败的线程将会进入FIFO队列中等待。然后,我们将独占锁的拥有者线程设置为null,将锁的状态设置为0,并返回。新的线程到队列中等待,只让队列中的head线程获取锁,是公平锁。,它默认就是非公平锁,新的线程与队列中的线程共同来抢资源。原创 2022-08-01 11:17:56 · 1479 阅读 · 1 评论 -
CAS底层原理
乐观锁通过乐观的方式进行操作,允许多个线程同时访问共享资源,提高了并发性能,但可能会导致一些额外的开销。但是,如果多个用户同时尝试更新账户余额,只有一个用户能够成功,其他用户需要重新尝试,可能会导致一些额外的开销。但是,当多个用户同时想要进行取款操作时,只有一个用户能够成功获取锁,其他用户需要等待,导致并发性能较低。:由于CAS操作是在一个循环中不断尝试的,如果并发冲突较多,CAS操作会导致CPU资源的浪费。使用悲观锁的方式是,当一个用户要进行取款操作时,先获取账户的锁,确保其他用户无法同时访问账户。原创 2022-07-25 09:02:09 · 1636 阅读 · 0 评论 -
synchronized锁的底层原理
需要注意的是,锁的升级是逐级升级的过程,而不是直接跳跃到最高级别的锁。锁的升级过程是由JVM自动管理的,根据线程的竞争情况和访问模式来判断是否需要升级锁的状态。在上锁的过程中,如果有其他线程也来抢锁,则进入EntryList 进行阻塞,当获得锁的线程执行完了,释放了锁,就会唤醒EntryList 中等待的线程竞争锁,竞争的时候是非公平的。来决定当前线程是否获得了锁,如果某一个线程获得了锁,在没有释放锁之前,其他线程是不能或得到锁的。类的Class对象的监视器锁,并执行方法体中的代码。其他线程如果尝试调用。原创 2022-07-04 11:40:08 · 4061 阅读 · 1 评论