Java基础-Queue队列
2017-03-07 11:28
295 查看
1.效果:
用cmd运行结果:
用Eclipse运行结果:
2.代码:
用cmd运行结果:
用Eclipse运行结果:
2.代码:
public class QueueStudy { public static void main(String[] args) { Queue q=new Queue(); Producter p=new Producter(q); Customer c=new Customer(q); p.start(); c.start(); } } //生产者 class Producter extends Thread{ Queue q; Producter(Queue q){ this.q=q; } public void run(){ for(int i=1;i<6;i++) { q.put(i);//推送数据 } } } //消费者 class Customer extends Thread{ Queue q; Customer(Queue q){ this.q=q; } public void run(){ while(true){//循环获取数据 q.get(); } } } //队列通知与接收数据 class Queue{ int count=0; boolean isEmpty=true; //生产者生产数据 public synchronized void put(int i){ if(!isEmpty){//如果生产者生产的数据不为空,则一直等待,直到数据为空 try{ System.out.println("Product wait ..."); wait(); } catch(Exception e){ e.printStackTrace(); } } count+=i; isEmpty=false; System.out.println("producter totoal product:"+i); notify();//通知消费者数据已生产,请消费数据 } //消费者消费数据 public synchronized void get(){ if(isEmpty){//如果数据为空,消费者等待生产者生产数据,直到有数据为止 try{ System.out.println("Customer wait ..."); System.out.println(""); wait(); } catch(Exception e){ e.printStackTrace(); } } count--; if(count==0){ isEmpty=true; notify();//通知生产者数据已空,请生产者生产数据 } System.out.println("Customer spend :"+count); } }
相关文章推荐
- [Java 基础] 并发队列ConcurrentLinkedQueue和阻塞队列LinkedBlockingQueue用法
- 队列Queue:一个被遗失的java.util类(1)
- 用Java实现HTTP文件队列下载-Java基础-Java-编程开发
- java中使用队列:java.util.Queue
- Java 数据结构之 Queue(队列)
- java中PriorityQueue优先级队列使用方法
- JAVA基础:用Java实现HTTP文件队列下载
- Java之美[从菜鸟到高手演变]之数据结构基础、线性表、栈和队列、数组和字符串
- java队列ConcurrentLinkedQueue的使用
- java中使用队列:java.util.Queue
- UtilBox(ub)基础组件 -- 并发任务队列Taskqueue/TaskDispatcher (一)
- java中使用队列:java.util.Queue(JDK 5新增)
- java数据结构之LinkedQueue(用链表实现的双端单向队列)
- 【数据结构与算法基础】以数组实现的循环队列 / Circular Queue implemented by array
- java中使用队列:java.util.Queue
- Java基础-如何编写一个JAVA的队列类-Java基础-Java-编程开发
- java中使用队列:java.util.Queue
- java中PriorityQueue优先级队列使用方法
- Java5 多线程(八)-- ArrayBlockingQueue阻塞队列
- java 队列Queue