java实现线程安全的队列
2017-04-06 11:23
274 查看
package com.xue.demo.condition例子; import java.util.Random; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; public class Demo { public static void main(String[] args) { //测试 final BoundedBuffer boundedBuffer = new BoundedBuffer(); //放 for (int i = 0; i < 2; i++) { Thread thread = new Thread(new Runnable() { public void run() { while(true){ try { boundedBuffer.put("你"+new Random().nextInt(100)); } catch (InterruptedException e) { e.printStackTrace(); } } } }); thread.start(); } //拿 for (int i = 0; i < 3; i++) { Thread thread2 = new Thread(new Runnable() { public void run() { while(true){ try { boundedBuffer.take(); } catch (InterruptedException e) { e.printStackTrace(); } } } }); thread2.start(); } } } //jdk的队列例子(线程安全队列),ArrayBlockingQueue 类提供了这项功能,因此没有理由去实现这个示例类 class BoundedBuffer { //锁 final Lock lock = new ReentrantLock(); //没有满--阻塞条件 final Condition notFull = lock.newCondition(); //没有空--阻塞条件 final Condition notEmpty = lock.newCondition(); //队列 final Object[] items = new Object[3]; //放到什么位置,从哪个位置取,当前队列中元素数量 int putptr, takeptr, count; public void put(Object x) throws InterruptedException { lock.lock(); try { while (count == items.length) notFull.await(); items[putptr] = x; Thread.sleep(1000); System.out.println(Thread.currentThread().getName()+"--放入--"+x+"--到位置--"+putptr); if (++putptr == items.length) putptr = 0; ++count; notEmpty.signal(); } finally { lock.unlock(); } } public Object take() throws InterruptedException { lock.lock(); try { while (count == 0) notEmpty.await(); Object x = items[takeptr]; Thread.sleep(1000); System.out.println(Thread.currentThread().getName()+"--取出--"+x+"--从位置--"+putptr); if (++takeptr == items.length) takeptr = 0; --count; notFull.signal(); return x; } finally { lock.unlock(); } } }jdk的
Condition类自带的例子,研读测试一下
4000
相关文章推荐
- [原创][Java]一个简单高效的线程安全队列的JAVA实现
- 队列的数组实现_JAVA描述《数据结构与算法分析》
- 用Java实现HTTP文件队列下载
- 用Java实现HTTP文件队列下载
- 利用链表实现队列的Java代码
- Java数组实现循环队列
- 用Java实现HTTP文件队列下载
- Java实现循环队列
- java 实现的队列
- 用类实现队列(JAVA)
- Java实现队列操作
- 用Java实现HTTP文件队列下载
- java实现队列
- 使用Java程序来实现HTTP文件的队列下载
- 用java中的HashMap实现队列
- java实现线程安全的三大利器
- 如何实现java文件队列下载
- JAVA基础:用Java实现HTTP文件队列下载
- Java实现HTTP文件队列下载
- java中关于优先级队列的实现