当前位置: 首页 > news >正文

成都网站建设技术安徽平台网站建设设计

成都网站建设技术,安徽平台网站建设设计,综合类门户网站有哪些,wordpress精美主题一、什么是堵塞队列 堵塞队列#xff08;Blocking Queue#xff09;是一种特殊类型的队列#xff0c;它具有一些特定的行为和限制。在堵塞队列中#xff0c;当队列为空时#xff0c;尝试从队列中取出元素的操作将会被阻塞#xff0c;直到队列中有可用元素#xff1b;当…一、什么是堵塞队列  堵塞队列Blocking Queue是一种特殊类型的队列它具有一些特定的行为和限制。在堵塞队列中当队列为空时尝试从队列中取出元素的操作将会被阻塞直到队列中有可用元素当队列已满时尝试向队列中添加元素的操作也会被阻塞直到队列有空闲位置。 堵塞队列常用于多线程编程场景中用于实现线程间的安全通信和协调。它提供了一种简单而有效的方式来实现线程的等待和唤醒机制使得线程能够在合适的时机进行阻塞或继续执行。 常见的堵塞队列实现包括 ArrayBlockingQueue基于数组的有界堵塞队列。LinkedBlockingQueue基于链表的可选有界默认无界堵塞队列。PriorityBlockingQueue支持优先级排序的堵塞队列。SynchronousQueue一个不存储元素的特殊堵塞队列用于实现线程间的直接传输。 使用堵塞队列可以有效地解决线程间的同步和通信问题简化了多线程编程的复杂性。 阻塞队列的典型应用场景生产者消费者模型 生产者消费者模型是一种常见的多线程协调工作的模式生产者和消费者之间通过阻塞队列进行通讯生产者生产出数据不用等待消费者来处理而是会直接放入到阻塞队列中消费者也不找生产者索要数据而是直接从阻塞队列中取。 生产者消费者模型的作用 有利于代码“解耦合” 生产者不用关心消费者的存在消费者也不需关心生产者的存在通过阻塞队列可以降低二者的关联关系。 “削峰填谷” 阻塞队列相当于一个“缓冲区”平衡了生产者和消费者的处理能力。 二、 代码实例 public static void main(String[] args) {BlockingDequeInteger blockingDeque new LinkedBlockingDeque();Thread t1 new Thread(() - {while (true) {try {Integer take blockingDeque.take();System.out.println(消费 take);} catch (InterruptedException e) {e.printStackTrace();}}});t1.start();Thread t2 new Thread(() - {int value 0;while (true) {try {System.out.println(生产 value);blockingDeque.put(value);value;Thread.sleep(1000);} catch (InterruptedException e) {e.printStackTrace();}}});t2.start();} 结果 三、模拟实现堵塞队列 注意 1.我们刚才实现的put和take方法的几乎每一行代码都涉及到读写操作所以在多线程环境下这种非原子操作一定是不安全的我们需要对这两个方法进行加锁并用volatile修饰相应的变量来保证线程安全 2.我们需要实现两个阻塞功能可以使用wait和notify来进行线程阻塞和唤醒线程的操作 3.wait方法是可以被其他方法比如interrupt方法提前唤醒的此时队列还是空或满的状态那么继续执行代码仍然会出错所以当线程被提前唤醒时我们需要再次判断队列是否为空或满的状态如果是则继续等待如果不是则执行后面的逻辑因此使用while循环判断就可以解决上述问题~ public class MyBlockingQueue {private int[] array new int[100];private volatile int head;//队首元素下标private volatile int tail;//队尾元素下标private volatile int size;//有效元素个数synchronized public void put(int elem) throws InterruptedException {//判断队列是否为满while (size array.length){this.wait();}//插入元素array[tail] elem;tail;//循环队列//队尾元素下标如果超出数组长度则从头开始存储if(tail array.length){tail 0;}size;this.notify();}synchronized public int take() throws InterruptedException {//判断队列是非为空while (size 0){this.wait();}//取出元素int value array[head];head;//队首元素下标如果超出数组长度则从头开始if(head array.length){head 0;}size--;this.notify();return value;}}
http://www.yutouwan.com/news/282004/

相关文章:

  • 网站维护郑州做的比较好网站公司吗
  • 想自己做网站做推广学做网站推广要多久时间
  • 网站的建立与运营网站制作需求
  • 股票网站开发百度账号登陆
  • 青岛网站制作多少钱一个怎么做线上营销
  • 国外网站建设什么价格低杭州平面设计
  • 定制类做网站多少钱网站建设朋友圈
  • 淄博网站建设优惠臻动传媒有公司如何制作网站
  • 国外以紫色为背景的网站汾阳做网站的公司
  • 银川网站建设报价神木网站设计公司
  • 做网站优化的好处中型企业网站建设
  • 每天推荐新设计的网站d0906网站建设与管理
  • 有电脑网站怎么做手机网站合肥网站开发
  • 创意网站设计 高端wordpress小白
  • 包头整站优化网络建站
  • 手机能建网站吗流量精灵
  • 网站建设立项说明书wordpress掐件
  • 网站建设典型发言做问卷调查赚钱的网站好
  • 2017网站设计趋势珠海做网站哪间好
  • 扬州网站建设小程序wordpress 5.0.2编辑器
  • 建设网站考证wordpress商城支付
  • 地方旅游网站怎么做seo优化对网店的推广的作用为
  • 电子商务网站开发原则六安市 网站集约化建设
  • 靖江有帮助做苏宁易购网站的公司吗知道网站是wp程序做的如何仿站
  • 企业可以在哪些网站做免费宣传awada wordpress
  • 内容展示类网站网站套餐网页
  • 哪里查询网站备案江苏省建设厅官方网站公式公告
  • 莆田自助建站软件黑客钓鱼网站的制作
  • 上国外网站dns想学淘宝美工去哪里学
  • 百度网站的建设网站统计插件