前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CountDownLatch的使用

CountDownLatch的使用

作者头像
DH镔
发布2019-12-19 21:22:14
3970
发布2019-12-19 21:22:14
举报

实现一个容器,提供get和size两个方法,些两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数大于5时,线程2给出提示并结束

接着这个问题,上一篇笔记的实现方法是用synchronized、wait和notify实现的,这种实现方式比较重,当不涉及同步,只是涉及线程通信的时候,那有没有更好的实现方法呢?(这不是废话吗)

CountDownLatch

CountDownLatch是一个非常实用的多线程控制的工具。常用的几个方法:

代码语言:javascript
复制
//实例化一个倒数器,count是指定计数个数
CountDownLatch(int count)
// 当count不等于0时,一直阻塞
void await()
// count - 1  操作
void countDown()

接下来用CountDownLatch来完成上面的题目

代码

代码语言:javascript
复制
public class Container2 {

    /**
     * 容器,volatile保证可见性
     */
    volatile List<Object> list = new ArrayList<>();

    /**
     * 添加元素方法
     *
     * @param object obj
     */
    public void add(Object object) {
        list.add(object);
    }

    /**
     * 返回容器大小
     *
     * @return 容器大小
     */
    public int size() {
        return list.size();
    }


    private static CountDownLatch countDownLatch = new CountDownLatch(1);

    public static void main(String[] args) {
        Container2 container1 = new Container2();

        new Thread(() -> {
            if (container1.size() != 5) {
                try {
                    countDownLatch.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.out.println("容器到达5个,结束");
            }
        }).start();

        new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                System.out.println(Thread.currentThread().getName() + "---" + i);
                try {
                    TimeUnit.SECONDS.sleep(1);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                container1.add(new Object());
                if (container1.size() == 5) {
                    countDownLatch.countDown();
                }
            }
        }).start();
    }
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

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

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

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

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