找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 331|回复: 1

随便总结一下java.juc工具

[复制链接]

378

主题

55

回帖

2063

积分

管理员

积分
2063
发表于 2020-11-1 20:44:41 | 显示全部楼层 |阅读模式
Java的JUC 就是并发工具包里面的东西。
比较核心的就是AQS(AbstractQueuedSynchronizer)
AQS 主要就是解决java 多线程的同步工具,阻塞抢占锁失败的线程进入同步队列进行等待。
AQS 里面有使用到一种轻量级锁,CAS(Compare And Swap) 以自旋的方式尝试抢占锁,抢占失败后进入同步队列
CAS 主要是保证多线程环境下的原子性操作,相当于一种乐观锁,配合自旋避免线程阻塞唤醒上下文的性能损耗


Java 的Lock可重入锁的实现ReentrantLock 相当于Synchronized, Condition 中的await/signal 相当于Synchronized 中Monitor的wait/notify




几个工具类:
CountDownLatch
所有依赖CountDownLatch 进行awat 的线程都会进入阻塞状态,由CountDownLatch 中count==0 条件触发所有线程唤醒
Semaphore
主要是用于限流,控制线程的并发数量,最大允许多少线程同时执行
CyclicBarrier
线程屏障, 类似于Buffer 一样的东西,当阻塞线程数达到一定的阈值时唤醒所有线程


回复

使用道具 举报

378

主题

55

回帖

2063

积分

管理员

积分
2063
 楼主| 发表于 2020-11-1 21:23:25 | 显示全部楼层
CyclicBarrier 是保证线程以一定的并发数量执行
CountDownLatch 是保证线程以一定的条件并发执行
Semaphonre 是限制线程的最大并发数量
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Comsenz Inc.

GMT+8, 2024-12-19 22:55 , Processed in 0.036466 second(s), 19 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表