• 非阻塞队列


     1 package unit;
     2 
     3 import java.util.PriorityQueue;
     4 
     5 /**
     6  * 非阻塞队列
     7  * @author 54304
     8  *
     9  */
    10 public class BlockingQueue {
    11     private int queueSize = 10;
    12     private PriorityQueue<Integer> queue = new PriorityQueue<Integer>(queueSize);
    13      
    14     public static void main(String[] args)  {
    15         BlockingQueue test = new BlockingQueue();
    16         Producer producer = test.new Producer();
    17         Consumer consumer = test.new Consumer();
    18          
    19         producer.start();
    20         consumer.start();
    21     }
    22      
    23     class Consumer extends Thread{
    24          
    25         @Override
    26         public void run() {
    27             consume();
    28         }
    29          
    30         private void consume() {
    31             while(true){
    32                 synchronized (queue) {
    33                     while(queue.size() == 0){
    34                         try {
    35                             System.out.println("队列空,等待数据");
    36                             queue.wait();
    37                         } catch (InterruptedException e) {
    38                             e.printStackTrace();
    39                             queue.notify();
    40                         }
    41                     }
    42                     queue.poll();          //每次移走队首元素
    43                     queue.notify();
    44                     System.out.println("从队列取走一个元素,队列剩余"+queue.size()+"个元素");
    45                 }
    46             }
    47         }
    48     }
    49      
    50     class Producer extends Thread{
    51          
    52         @Override
    53         public void run() {
    54             produce();
    55         }
    56          
    57         private void produce() {
    58             while(true){
    59                 synchronized (queue) {
    60                     while(queue.size() == queueSize){
    61                         try {
    62                             System.out.println("队列满,等待有空余空间");
    63                             queue.wait();
    64                         } catch (InterruptedException e) {
    65                             e.printStackTrace();
    66                             queue.notify();
    67                         }
    68                     }
    69                     queue.offer(1);        //每次插入一个元素
    70                     queue.notify();
    71                     System.out.println("向队列取中插入一个元素,队列剩余空间:"+(queueSize-queue.size()));
    72                 }
    73             }
    74         }
    75     }
    76 }
  • 相关阅读:
    c#委托总结
    架构研究一(autofac 注册路由 )
    Fedora20 和ubuntu 14.04 chrome标签中文乱码
    Fedora20 编译安装qemu-system
    NFS安装配置
    Mysql自动备份脚本
    Mysql性能调优(my.cnf参数篇)
    Mysql性能基本测试
    mysql编译安装主从复制
    Mysql 配置参数详解以及优化配置
  • 原文地址:https://www.cnblogs.com/redhat0019/p/8034174.html
Copyright © 2020-2023  润新知