首页 > 其他分享 >CountDownLatch的介绍

CountDownLatch的介绍

时间:2024-11-30 22:22:40浏览次数:8  
标签:getState return int 介绍 共享资源 线程 CountDownLatch

CountDownLatch的介绍

   CountDownLatch是JUC中的一个同步工具类,它可以帮助我们实现线程之间的同步和协作。它的核心思想是通过计数器来控制线程的执行顺序。当计数器的值降为0时,所有等待的线程都会被唤醒,然后开始执行下一步操作。

 1 // Sync 类继承自 AbstractQueuedSynchronizer,提供了共享锁的功能
 2 private static final class Sync extends AbstractQueuedSynchronizer {
 3 
 4     // 构造方法,设置初始计数值
 5     Sync(int count) {
 6         // 使用 AQS 的 setState 方法来设置同步器的状态,这里用 count 来初始化状态
 7         // 计数值即锁的可用次数
 8         setState(count);  
 9     }
10 
11     // 获取当前的计数值(即剩余的共享资源数量)
12     int getCount() {
13         // 调用 AQS 的 getState 获取当前状态,即共享资源的剩余数量
14         return getState(); 
15     }
16 
17     // 试图以共享模式获取锁(acquireShared),即检查是否可以获取共享资源
18     protected int tryAcquireShared(int acquires) {
19         // 状态为0时,返回为1,表示资源获取成功。返回为-1时,表示资源不可用,线程需要挂起等待。
20         return (getState() == 0) ? 1 : -1;
21     }
22 
23     // 试图以共享模式释放锁(releaseShared),即释放一个共享资源
24     protected boolean tryReleaseShared(int releases) {
25         for (;;) { // 循环尝试,直到成功
26             // 获取当前的状态值(即共享资源数量)
27             int c = getState();
28             
29             //如果当前状态(即共享资源的数量)为 0,表示已经没有共享资源可以释放,因此返回 false,表示释放操作失败。
30             if (c == 0)
31                 return false;  // 没有资源,返回 false
32             
33             // 计数器的值减1
34             int nextc = c - 1;
35             
36             // 尝试更新状态(使用 CAS 操作)
37             if (compareAndSetState(c, nextc)) {
38                 // 如果计数器的值减为0,说明所有线程已经执行完毕,返回 true,否则返回false。
39                 return nextc == 0;  
40             }
41         }
42     }
43 }

 

标签:getState,return,int,介绍,共享资源,线程,CountDownLatch
From: https://www.cnblogs.com/hld123/p/18579023

相关文章

  • 大模型技术全面解析,从大模型的概念,技术,应用和挑战多个方面介绍大模型
    引言大模型(LargeModels)是人工智能发展的里程碑,特别是基于深度学习的预训练模型(如GPT、BERT)。随着模型参数规模的指数级增长,大模型在自然语言处理(NLP)、计算机视觉(CV)等领域取得了突破性成果。本文将深入解析大模型的核心技术、应用场景、优化策略及未来挑战。大模型......
  • 泷羽sec学习--Burp Suite之基本介绍
     学习内容来自B站UP:泷羽sec微信公众号:泷羽sec一、基本介绍BurpSuite是一款用于Web应用程序安全测试的集成平台。它是由PortSwigger公司开发的,是渗透测试人员、安全研究人员和Web开发人员检查和分析Web应用程序安全问题的重要工具。它提供了一个直观的图形化界......
  • WiFi+4G摄像头拍照图传模块(夜视2K高清1080P)-产品功能介绍
    <p><iframename="ifd"src="https://mnifdv.cn/resource/cnblogs/product/audioCamera.html"frameborder="0"scrolling="auto"width="100%"height="1500"></iframe></p> 说明研发此......
  • 介绍一下IndexedDB以及封装IndexedDB的模块代码
    IndexedDB简介IndexedDB是一种浏览器内置的低层次的API,用于在客户端存储大量结构化数据。它是一个浏览器端的数据库,允许你存储各种类型的对象,包括文件、二进制数据等,并通过键值对的方式进行快速查询。与WebStorage(如localStorage和sessionStorage)不同,IndexedDB可以存储......
  • AI让照片跳舞,人人都能是舞王!Swan下载介绍
    最近,兵马俑、马斯克以及各地网友跳科目三和网红舞的视频陆续在社交媒体和朋友圈刷屏,这些大约10秒左右的视频都不是真人出镜,均由大模型生成,这种低门槛的跳舞方式引发了网友的广泛体验,掀起了一波斗舞狂潮「AI治愈了我的四肢不协调」Swan是一款使用扩散模型实现的时域一致的人体图......
  • 介绍一下IndexedDB以及封装IndexedDB的模块代码
    1.IndexedDB简介IndexedDB是一种在浏览器中存储结构化数据的方式,类似于关系数据库,但它具有更高的存储容量和灵活性。相比于localStorage,IndexedDB适合存储大量数据,能够处理更复杂的数据结构,并且支持异步操作。它是浏览器端持久化存储的一种常用方式。IndexedDB的特点:异步:I......
  • Ansible自动化运维(一)介绍、安装部署
    Ansible自动化运维这部分我将会分为五个部分来为大家讲解(一)介绍、安装部署、设置主机清单(二)Ansible中的ad-hoc模式模块详解(15)个(三)Playbook模式详解(四)jinja2模板Roles角色详解(五)运维实战相关文章大家在最后可以看到一、简介1.认识自动化运维传统运维效率低,大多工......
  • 顺序表的时间复杂度介绍
    顺序表的时间复杂度介绍引言顺序表(Array)是一种常见的数据结构,它在逻辑上是一种线性表,物理结构上是顺序存储。顺序表通过连续的内存空间存储数据元素,具有高效的随机访问特性。本文将详细介绍顺序表的增删改查操作的时间复杂度,并从最好、最坏和平均三个角度分析其性能表现。同时,我......
  • Linux的介绍及虚拟机centOS系统的下载与应用
    1、什么是LinuxLinux是一种类Unix操作系统,它的内核(Kernel)由LinusTorvalds于1991年首次发布。作为一个开源、免费的操作系统,Linux被广泛用于服务器、桌面计算机、嵌入式设备、移动设备等各种场景。1、操作系统操作系统是一组主管并控制计算机软硬件、资源以及服......
  • Java多线程介绍及使用指南
    “多线程”:并发要介绍线程,首先要区分开程序、进程和线程这三者的区别。程序:具有一定功能的代码的集合,但是是静态的,没有启动运行进程:启动运行的程序【资源的分配单位】线程:进程中的每一条执行路径,就是线程。概念:并行:多个CPU同时执行多个任务并发:一个CPU“同时”执行多......