栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

zookeeper实现阻塞式队列

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zookeeper实现阻塞式队列

在上一个基础上实现阻塞式队列,拿不到队列数据时,进行阻塞直到拿到数据,继承之前的类对poll方法升级

  @Override
    public T poll() throws InterruptedException, KeeperException {
        boolean flag=true;
        while (flag){
            //结束在latch上的等待,再来一次
            final CountDownLatch latch=new CountDownLatch(1);

            final Watcher childListener=new Watcher() {
                @Override
                @SneakyThrows
                public void process(WatchedEvent event) {
                    //监听子节点列表的  变更情况
                    if (event.getType()==Event.EventType.NodeChildrenChanged){
                        //队列变化
                        latch.countDown();
                    }
                    //重新绑定监听
                    zkClient.getChildren(root,this);
                }
            };
            zkClient.getChildren(root,childListener);
            try {
               T node=super.poll(); //调用父类的poll方法获取队列数据
               if(node!=null){
                   return node;
               }else {
                   //拿不到队列数据则在latch里await
                   latch.await();
               }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        return null;
    }

运行结果和之前差不多

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/921725.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号