Java 并发工具包
2021-04-11 12:19:45 10 举报
AI智能生成
并发编程,Java中避不开的一个技术,一起精进吧
作者其他创作
大纲/内容
回复【并发编程】领取精选资料
同步器
场景:为每种特定的同步问题提供了解决方案
同步器1:信号量
描述:通过计数器控制对共享资源的访问
Semaphore
经典的信号量,通过计数器控制对共享资源的访问
API
Semaphore(int count)
创建拥有count个许可证的信号量
acquire()/aquire(int num)
获取1/num个许可证
release/release(int num)
释放1/num个许可证
演示例子:两个柜台,三个客户
两个资源
三个线程
CountDownLatch
计数栓:必须发生指定数量的事件后才可以继续运行
CountDownLathc(int count)
必须发生count个数量才可以打开锁存器
await()
等待锁存器
countDown()
触发事件
演示例子:赛跑比赛,喊三二一跑
同步器2
CyclicBarrier:循环屏障
适用于只有多个线程都到达预定点时才可以继续执行
API
CyclicBarrier(int num)
等待线程的数量
CyclicBarrier(int num ,Runnable action)
等待线程的数量以及所有线程到达后的操作
await()
到达临界点后暂停线程
举例:王者荣耀的匹配排队
Exchanger:交互器
简化两个线程间数据的交换
API
Exchanger
指定进行交换的数据类型
V exchange(V object)
等待线程到达,交换数据
举例:对话
Phaser
工作方式与CyclicBarrier类似,但是可以指定多个阶段
API
Phaser()/Phaser(int num)
使用指定0/num个party创建Phaser
register()
注册party
arriveAndWaitAdvance()
到达时等待到所有party到达
arriveAndDeregister
到达时注销线程自己
举例:饭店服务,服务员,厨师、上菜
执行器
概念:用于启动并发控制线程的执行
核心接口为Executor,包含一个execute(Runnable)用于指定被执行的线程
ExecutorService接口用于控制线程执行和管理线程
ThreadPoolExecutor/ScheduledThreadPoolExecutor/ForkJoinPool
Callable
表示具有返回值的线程
V:表示返回值类型
call():执行任务
Future
表示Callable的返回值
V:表示返回值类型
get():获取返回值
举例:加和
锁与原子操作
锁
lock包 提供锁支持
替代synchronized控制资源
lock/unlock
Reen
原子性
atomic包
场景:提供了不需要锁即可完成并发环境变量使用的原子性操作
locks包
使用Lock接口为并发编程提供了同步的另一种替代方案
流编程
基本知识
表示数据的移动
不同IO,表示流对象
操作分为中间操作和终端操作
中间产生新的对象
模型
获取流
操作
Fork/Join框架
场景:提供了对并行编程的支持
并发集合
场景:提供了集合框架中集合的支持
0 条评论
下一页