前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >同步工具类 Java并发编程实战 学习笔记

同步工具类 Java并发编程实战 学习笔记

作者头像
发布2020-06-02 10:59:52
6400
发布2020-06-02 10:59:52
举报
文章被收录于专栏:WD学习记录
  • 阻塞队列
  • 闭锁
  • 栅栏
  • FutuerTask
  • 信号量

同步工具类可以根据自身的状态来协调线程的控制流。

同步工具类都包含特定的结构化属性,封装了一些状态,这些状态觉得指定同步工具类的线程是继续执行还是等待。同时,提供了操作状态的方法。

阻塞队列

阻塞队列不仅能作为保存对象的容器,还能协调生产者和消费者等线程之间的控制流。take和put等方法将阻塞,直到队列达到期望的状态。

闭锁

闭锁是一种同步工具类,可以延迟线程进度直到其到达终止状态。闭锁的作用相当于一扇门,闭锁到达结束状态之前,这扇门一直是关闭的,并且没有任何线程能通过,当结束时,这扇门会打开,并且允许所有线程通过。闭锁可以用来确保某些活动直到其他活动都完成后才继续执行。

比如:确保某个计算在所有依赖的资源都被初始化之后才继续执行,等到直到某个操作的所有参与者都准备就绪再继续执行。

闭锁状态包括计数器,被初始化为一个整数,等待的每个任务完成之后-1,当计数器变成0之后表示等待的所有事件都已经完成了,可以进行后续的计算了。

CountDownLatch是一种实现。

FutureTask

FutureTask通过Callable来实现的,有三种状态,等待运行、正在运行和运行完成。完成包括正常结束、取消导致结束和异常导致结束。

当程序中有耗时的操作,并且可以分为多个可以并行执行的流程,然后最后聚合结果的时候,可以考虑使用FutureTask来加速执行

代码语言:javascript
复制
public T someMethod(){
    FutureTask<T> task1= new FutureTask(....);
    FutureTask<T> task2= new FutureTask(....);
    FutureTask<T> task3= new FutureTask(....);
    executor.submit(task1);
    executor.submit(task2);
    executor.submit(task3);
    try{
        task1.get();
        task2.get();
        task3.get();
        // 聚合操作
    }catch(Exception e){
        // 异常处理
    }
    // ...
}

信号量

计数信号量可以控制同时访问某个特定资源的操作数量。

Semaphore中管理者一组虚拟的permit,在初始化时指定数量,执行之前先获取许可,使用之后释放。

栅栏

栅栏类似于闭锁,能阻塞一组线程知道某个事件发生。

区别:栅栏与闭锁关键区别在于所有线程必须同时到达栅栏位置,才能继续执行。闭锁用于等待事件,栅栏用于等待其他线程(参考:https://www.cnblogs.com/steffen/p/11244715.html)。CyclicBarrier是一种实现,可以使一定数量的参与方反复在栅栏位置执行。

Exchanger也是另一种栅栏,可以用于两个线程之间交换数据,可以参考(https://www.jianshu.com/p/990ae2ab1ae0https://blog.csdn.net/octopusflying/article/details/80634864

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/05/30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 阻塞队列
  • 闭锁
    • FutureTask
    • 信号量
    • 栅栏
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档