博客
关于我
Java锁之CountDownLatch、Atomic源码解析
阅读量:797 次
发布时间:2023-03-28

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

CountDownLatch

1.1 整体架构

CountDownLatch 是一个用于线程间同步的工具,允许一个线程或多个线程等待所有线程运行完毕后再继续执行。其核心机制基于 Sync 内部类,该类继承自 AbstractQueuedSynchronizer(AQS),提供了同步的实现基础。

1.2 await 方法

await 方法是 CountDownLatch 的关键操作,用于等待所有相关线程完成。其实现基于 Sync 类的 acquireSharedtryAcquireShared 方法:

  • acquireSharedInterruptibly(1):这个方法会阻塞当前线程,直到 Sync 同步器允许继续执行。具体实现中,线程会被挂起,并添加到等待队列中。
  • tryAcquireShared(1):尝试获取共享锁,返回一个标志值,表示是否成功获取锁。如果成功,会返回正数,否则返回负数。
  • doAcquireSharedInterruptibly(1):这个方法负责将线程挂起,并在等待队列中添加节点。线程会自旋,直到找到前驱节点为头节点时才会获取锁。

1.3 countDown 方法

countDown 方法用于通知所有等待线程当前操作完成。其实现基于 Sync 类的 releaseShared 方法:

  • releaseShared(1):尝试释放共享锁,调用 tryReleaseShared 方法来判断是否成功。如果成功,会调用 doReleaseShared 方法,唤醒等待的线程。
  • tryReleaseShared(1):这个方法会自旋直到找到需要释放的节点,并更新其状态。
  • doReleaseShared():这个方法负责唤醒等待的线程,并更新队列的状态,确保所有线程都能继续执行。

Atomic

2.1 整体架构

Atomic 类提供了线程安全的原子操作,适用于高并发场景下的数据访问需求。其核心实现基于 AtomicInteger 类,提供了线程安全的计数器操作。通过 getgetAndIncrementgetAndDecrement 等方法,可以确保多线程环境下数据的正确性。

2.2 核心实现

  • get():返回当前计数器的值。
  • getAndIncrement():自增 1,返回操作之前的值。
  • getAndDecrement():自减 1,返回操作之前的值。

这些方法通过 unsafe 类的支持,确保了操作的原子性和线程安全。

转载地址:http://rshfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现多项式函数在某个点的评估算法(附完整源码)
查看>>
Objective-C实现多项式哈希算法(附完整源码)
查看>>
Objective-C实现大位数乘法(附完整源码)
查看>>
Objective-C实现大根堆(附完整源码)
查看>>
Objective-C实现奇偶检验码(附完整源码)
查看>>
Objective-C实现奇偶转置排序算法(附完整源码)
查看>>
Objective-C实现奇异值分解SVD(附完整源码)
查看>>
Objective-C实现子集总和算法(附完整源码)
查看>>
Objective-C实现字符串autocomplete using trie(使用 trie 自动完成)算法(附完整源码)
查看>>
Objective-C实现字符串boyer moore search博耶摩尔搜索算法(附完整源码)
查看>>
Objective-C实现字符串IP地址转DWORD地址(附完整源码)
查看>>
Objective-C实现字符串jaro winkler算法(附完整源码)
查看>>
Objective-C实现字符串manacher马拉车算法(附完整源码)
查看>>
Objective-C实现字符串wildcard pattern matching通配符模式匹配算法(附完整源码)
查看>>
Objective-C实现字符串word patterns单词模式算法(附完整源码)
查看>>
Objective-C实现字符串Z 函数或 Z 算法(附完整源码)
查看>>
Objective-C实现字符串加解密(附完整源码)
查看>>
Objective-C实现字符串复制功能(附完整源码)
查看>>
Objective-C实现字符串是否回文Palindrome算法 (附完整源码)
查看>>
Objective-C实现字符串查找子串(附完整源码)
查看>>