Java线程同步工具-ArrayBlockingQueue
来源:互联网 发布:java工程师职业路线 编辑:程序博客网 时间:2024/06/05 13:33
ArrayBlockingQueue
JDK内部提供的同步队列,能够保证线程安全
从阻塞队列的结构可以看出阻塞队列是Collectuon集合的一个子类
主要同步方法:
- put方法
public void put(E e) throws InterruptedException { checkNotNull(e); final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { while (count == items.length) notFull.await(); enqueue(e); } finally { lock.unlock(); } }
- take方法
public E take() throws InterruptedException { final ReentrantLock lock = this.lock; lock.lockInterruptibly(); try { while (count == 0) notEmpty.await(); return dequeue(); } finally { lock.unlock(); } }
测试代码:
package com.zhiwei.thread;import java.util.concurrent.ArrayBlockingQueue;/** * 阻塞队列:可用于处理生产消费的问题 * * 实现机制:put/take利用重入锁ReentrantLock实现同步效果 */public class ArrayBlockingQueueTest { public static void main(String[] args) { ArrayBlockingQueue<String> abq = new ArrayBlockingQueue<String>(3); new Thread(new Runnable() { @Override public void run() { while(true){ try { Thread.sleep(1000); abq.put("Hello Java World"); System.out.println(Thread.currentThread().getName()+":放入数据,剩余数据:"+abq.size()); } catch (Exception e) { e.printStackTrace(); } } } }).start(); new Thread(new Runnable() { @Override public void run() { while(true){ try { Thread.sleep(10000); abq.take(); System.out.println(Thread.currentThread().getName()+":取出数据,剩余数据:"+abq.size()); } catch (Exception e) { e.printStackTrace(); } } } }).start(); }}
- 效果
阅读全文
0 0
- Java线程同步工具-ArrayBlockingQueue
- ArrayBlockingQueue 实现线程同步效果例子
- java线程系列---队列ArrayBlockingQueue
- Java线程同步工具-CountDownLatch
- Java线程同步工具-CyclicBarrier
- Java线程同步工具-Semaphore
- java 线程 CountDownLatch 同步工具
- java 线程同步工具Semaphore
- java 线程 同步工具 CyclicBarrier
- java并发编程-同步类容器-ArrayBlockingQueue
- Java 7之多线程并发容器 - ArrayBlockingQueue
- java的几种线程同步工具
- java多线程中线程同步工具-CountDownLatch
- java线程同步工具类总结
- java ArrayBlockingQueue
- Java线程(五):JUC包线程同步工具
- java同步包种ArrayBlockingQueue类的分析与理解
- CyclicBarrier线程同步工具
- Hdu A+B for Input-Output Practice (IV)
- 2)线程的调度、优先级
- 【脚本语言系列】关于Python数据库访问专用模块,你需要知道的事
- C++中assert的用法
- thread21
- Java线程同步工具-ArrayBlockingQueue
- hive建表的格式问题
- Android之FrameLayout(帧布局)
- [bigdata-099] R语言评分卡 德国信贷数据集
- html实现一个不断滚动的虚线矩形
- 二叉树的下一个结点
- JVM架构和GC垃圾回收机制(JVM面试不用愁)
- python初始化二维数组的小问题
- [安卓]使用SQLite的标准步骤