简介

Java在单机环境实现了BlockQueue阻塞队列,与之类似的curator实现了分布式场景下的阻塞队列,SimpleDistributedQueue

官方文档:http://curator.apache.org/curator-recipes/simple-distributed-queue.html

javaDoc:http://curator.apache.org/apidocs/org/apache/curator/framework/recipes/queue/SimpleDistributedQueue.html

注意:zookeeper虽然可以实现队列,但是官方并不推荐使用zookeeper来做队列,主要原因在于zookeeper的空间大小设计的比较小,且对于大量数据的处理性能比较低,所以比较适合用户处理一些元数据以及应用协调,对于大量数据的建议使用其它分布式队列,比如redisson之类的,或者采用共享存储来实现。

代码示例

import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.recipes.queue.SimpleDistributedQueue;
import org.apache.curator.retry.ExponentialBackoffRetry;public class SimpleQueueDemo {private static CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181", new ExponentialBackoffRetry(3000, 2));private static String path = "/queue/path001";public static void main(String[] args) throws InterruptedException {client.start();System.out.println("started");SimpleDistributedQueue queue = new SimpleDistributedQueue(client, path);new Thread(() -> {try {System.out.println("sleeping");Thread.sleep(3000);System.out.println("sleep end");new SimpleDistributedQueue(client, path).offer("lay".getBytes("utf-8"));System.out.println("offered");} catch (Exception e) {System.out.println("exception");e.printStackTrace();}}).start();System.out.println("polling");String data = null;try {data = new String(queue.take());} catch (Exception e) {e.printStackTrace();}System.out.println("data=" + data);client.close();}
}

输出结果

started
polling
sleeping
sleep end
offered
data=lay

主线程会阻塞直到offer了数据

转载于:https://www.cnblogs.com/lay2017/p/10264503.html

七、curator recipes之阻塞队列SimpleDistributedQueue相关推荐

  1. 聊聊并发(七)——Java中的阻塞队列

    1. 什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队列可用 ...

  2. 无界阻塞队列 LinkedBlockingQueue 原理探究

    2019独角兽企业重金招聘Python工程师标准>>> 一.前言 本文介绍下使用独占锁实现的阻塞队列LinkedBlockingQueue的实现. 二. LinkedBlocking ...

  3. 并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究

    并发队列-无界非阻塞队列 ConcurrentLinkedQueue 原理探究 http://www.importnew.com/25668.html 一. 前言 常用的并发队列有阻塞队列和非阻塞队列 ...

  4. 《Java并发编程的艺术》之阻塞队列

    阻塞队列是一个支持两个附加操作的队列.这两个附加的操作支持阻塞的插入和移除方法: 1) 支持阻塞的插入方法:当队列满时,队列会阻塞执行插入的线程 2) 支持阻塞的移除方法:当队列空时,队列会阻塞执行移 ...

  5. Java面试之阻塞队列

    阻塞队列 概念 队列 队列就可以想成是一个数组,从一头进入,一头出去,排队买饭(FIFO),和栈是一样的FIFO 阻塞队列 BlockingQueue 阻塞队列,排队拥堵,首先它是一个队列,而一个阻塞 ...

  6. java多线程12:阻塞队列Queue

    本篇主要内容如下: 本篇主要内容 帮你总结好的阻塞队列: 18种Queue总结 一.Queue自我介绍 队列原理图 1.1 Queue自我介绍 hi,大家好,我的英文名叫Queue,中文名叫队列,无论 ...

  7. BlockingQueue(阻塞队列)

    BlockingQueue 阻塞队列(BlockingQueue) 是一个支持两个附加操作的队列.这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队 ...

  8. 并发编程5:Java 阻塞队列源码分析(下)

    上一篇 并发编程4:Java 阻塞队列源码分析(上) 我们了解了 ArrayBlockingQueue, LinkedBlockingQueue 和 PriorityBlockingQueue,这篇文 ...

  9. J.U.C 学习(三)之 “阻塞队列”

    生产者消费者的实际使用 相信大家都有使用过分布式消息队列,比如 ActiveMQ. kafka.RabbitMQ 等等,消息队列的是有可以使得程序之间实现解耦,提升程序响应的效率. 如果我们把多线程环 ...

  10. 并发编程(十三):阻塞队列之ArrayBlockingQueue

    一,关联源码链接 * 并发编程(四):AbstractQueuedSynchronizer源码分析 * 并发编程(五):AQS之重入锁ReentrantLock * 并发编程(七):AQS之Condi ...

最新文章

  1. 照片换色 使用Python 或者 java
  2. FreeRTOS 的命名规则
  3. DRF的版本控制,认证,权限和频率限制
  4. 软件工程:第五章作业
  5. Android启动后icon应用图标不能显示的可能问题
  6. python的内建函数built-in functions
  7. python中的type函数-python的type函数
  8. ●POJ 1873 The Fortified Forest
  9. Python实现Hart协议
  10. 【中山大学】【东校区】【无线路由】【wr703n】【openwrt】电脑客户端的iptv网络电视在无线路由下不能打开的解决方法
  11. 转. Dynamics AX 20年简史
  12. 暗月渗透实战靶场-项目七(下)
  13. 请求指纹认证授权秘钥使用
  14. 【Java网络编程】:Netty实现OIO和NIO
  15. 顶象App加固——助力微投证券融入IOS生态
  16. linux gt; gt;gt;区别,linux中amp;gt;什么意思? - 懂得
  17. java 国际化_Java国际化基础
  18. 使用Google时区API显示任何城市的实时本地时间
  19. 深度学习应用13电影评论情感分析
  20. 关于python如何编写注释(包含中文)及出现SyntaxError: Non-UTF-8 code starting with ‘\xca‘ in file错误解决方案

热门文章

  1. Springboot+ Mybatis搭建学习
  2. 技术选型和知识点介绍(上)
  3. android lottie字体json,Android Lottie集成及基本用法
  4. 前端调用websocket的3种不同写法
  5. 六石管理学:使用排除法解决问题
  6. Linux ldd时某个依赖库so not found的一种特殊情形
  7. 欢迎给吾博客评分:如果遇见且有帮助,请帮忙打分
  8. 从openjdk.java.net获取OpenJDK8源码并编译(amd64/aarch64/arm64)
  9. libpng12.so.0:没有那个文件或目录
  10. NDK编译doubango时出现错误:undefined reference to ‘stderr‘