
juc
文章平均质量分 86
Mutig_s
在校生计算机学渣
展开
-
并发编程之CAS
再次强调,由于CAS是一种系统原语,原语属于操作系统用语范畴,是由若干条指令组成的,用于完成某个功能的一个过程,并且原语的执行必须是连续的,在执行过程中不允许被中断,也就是说CAS是一条CPU的原子指令,不会造成所谓的数据不一致问题。CAS是实现自旋锁的基础,CAS利用CPU指令保证了操作的原子性,以达到锁的效果,至于自旋锁---字面意思自己旋转。是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式去尝试获取锁,当线程发现锁被占用时,会不断循环判断锁的状态,直到获取。题目:实现一个自旋锁,借鉴CAS思想。原创 2023-12-26 19:15:47 · 981 阅读 · 0 评论 -
谈谈你对AQS的理解
AQS,全称为AbstractQueuedSynchronizer,是Java并发包(java.util.concurrent)中一个核心的框架,主要用于构建阻塞式锁和相关的同步器,也是构建锁或者其他同步组件的基础框架。AQS提供了一种基于FIFO(First-In-First-Out)的CLH(三个人名缩写)双向队列的机制,来实现各种同步器,如ReentrantLock、Semaphore、CountDownLatch等。原创 2024-06-27 00:05:06 · 941 阅读 · 0 评论 -
面试题:说说你是如何理解CAS的?
ABA问题是多线程编程中使用CAS(Compare-And-Swap)操作时遇到的一种典型问题。它指的是这样一种情况:一个线程在执行CAS操作时,发现目标变量的值已经从初始值A变成了B,然后又变回了A。由于CAS操作只检查值是否等于预期值(A),它无法检测出值曾经被其他线程修改过。因此,CAS操作会误认为值没有变化,从而继续执行,这可能会导致数据一致性问题。原创 2024-06-25 19:49:59 · 742 阅读 · 0 评论 -
如何解决ThreadLocal内存泄漏问题?
内存泄漏是指程序无法再使用某些内存,但这些内存却不会被回收,导致系统内存的浪费,最终可能导致内存不足。中的内存泄漏问题主要是因为的键是弱引用,而值是强引用。让我们更详细地分析这个问题。原创 2024-06-25 03:31:44 · 657 阅读 · 0 评论 -
说说ThreadLocal的实现原理
独立性:每个线程拥有自己的 ThreadLocalMap 实例,因此对 ThreadLocal 的操作不会相互干扰。线程安全:由于每个线程有独立的 ThreadLocalMap,不存在并发访问 ThreadLocalMap 的问题,因此操作是线程安全的。这种设计使得 ThreadLocal 非常适合在多线程环境下使用,用于存储线程私有的变量,从而避免了线程间的数据共享问题。原创 2024-06-25 03:26:11 · 889 阅读 · 0 评论 -
说说ReentrantLock的实现原理
ReentrantLock翻译过来是可重入锁,是 Java 并发包 java.util.concurrent.locks 中的一个锁实现,它提供了比 synchronized 关键字更丰富的功能。可中断可以设置超时时间可以设置公平锁支持多个条件变量与synchronized一样,都支持重入。原创 2024-06-26 17:39:13 · 437 阅读 · 0 评论 -
谈谈你对 volatile 的理解
无法修饰方法及代码块等。通常,在没有volatile时,一个线程对变量的修改可能会被缓存到线程本地的CPU缓存中,其他线程无法立即看到这种修改。情况四:先执行actor1()方法中第二行代码,然后执行actor2()方法获取结果,y为1、x为0,此时不正常,发生了指令重排序,影响结果。情况二:先执行actor1()方法中的第一行代码,然后执行actor2()方法获取结果,y为0、x为1,此时正常。情况三:先执行actor1()方法中所有代码,然后执行actor2()方法获取结果,y为1、x为1,此时正常。原创 2024-06-25 23:12:27 · 390 阅读 · 1 评论