侧边栏壁纸
博主头像
Monkey部落博主等级

Monkey部落,分享技术、经验、遇到的问题及解决方法,欢迎大家互相讨论分享。

  • 累计撰写 59 篇文章
  • 累计创建 36 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

CountDownLatch和Semaphore的区别和底层原理

Monkey部落
2024-04-07 / 0 评论 / 0 点赞 / 29 阅读 / 266 字
温馨提示:
本文最后更新于 2024-04-07,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

CountDownLatch和Semaphore的区别和底层原理

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

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

0

评论区