CountDownLatch和Semaphore的区别和底层原理

1、CountDownLatch表示计数器,可以给CountDownLatch设置一个数字,一个线程调用CountDownLatch的await()将会堵塞,其他线程可以调用CountDownLatch的countDown()方法来对CountDownLatch中的数字减一,当数字被减成0后,所有await的线程都将被唤醒。对应的底层原理就是,调用await()方法的线程会利用AQS排队,一旦数字被减为0,则会将AQS中排队的线程依次唤醒。

2、Semaphore表示信号量,可以设置许可的个数,表示同时允许最多多少个线程使用该信号量,通过acquire()来获取许可,如果没有许可可用则线程堵塞,可以通过release()方法来释放许可,当某个线程释放了某个许可后,会从AQS中正在排队的第一个线程开始依次唤醒,直到没有空间许可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java util 是 Java 提供的一个工具类库,包含了很多常用的工具类和数据结构,比如集合类、日期类、随机数生成器等。要快速掌握 Java util 底层原理,可以从以下几个方面入手: 1. 集合类的底层实现:Java util 中的集合类是开发中经常使用的工具,比如 ArrayList、LinkedList、HashMap 等。要深入理解集合类的底层实现,需要了解它们的数据结构和算法,比如 ArrayList 的底层实现是基于数组,LinkedList 的底层实现是基于双向链表,HashMap 的底层实现是基于哈希表。 2. 掌握常用的 API:Java util 中提供了很多常用的 API,比如集合类的 add、remove、get 等方法,日期类的格式化和解析方法,随机数生成器的方法等。掌握这些常用的 API 可以提高开发效率。 3. 熟悉常用的工具类:Java util 中还提供了很多常用的工具类,比如 Arrays、Collections、Random 等。这些工具类的底层实现不需要深入理解,但要熟悉它们提供的方法和用法。 4. 了解并发工具类:Java util 中还提供了很多并发工具类,比如 SemaphoreCountDownLatch、CyclicBarrier 等。这些工具类的底层实现涉及到线程同步和并发控制的原理,需要深入理解。 总之,要快速掌握 Java util 底层原理,需要了解常用的集合类、API、工具类和并发工具类的底层实现原理,这样才能更好地理解它们的使用方法和注意事项。同时,也可以通过源码阅读和调试,深入理解其实现原理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值