博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jdk1.4 构建 java多线程,并发设计框架 (二)
阅读量:2792 次
发布时间:2019-05-13

本文共 1496 字,大约阅读时间需要 4 分钟。

 一个多线程并发排队
  1. /**
  2.  * 线程请求队列,用来处理多线程并发排队.
  3.  * 实际用的是先进先出的堆栈 Queue,默认队大小为128
  4.  * @author guishuanglin 2008-11-3
  5.  * 
  6.  */
  7. public class ConcurrentQueue {
  8.     private Queue QUEUE;
  9.     private int QUEUE_SIZE = 128;
  10.     private String QUEUE_NAME = "Queue";
  11.     
  12.     public ConcurrentQueue() {
  13.         QUEUE = new Queue();
  14.         printQueueSize();
  15.     }
  16.     public ConcurrentQueue(int size) {
  17.         QUEUE_SIZE = size;
  18.         QUEUE = new Queue();
  19.         printQueueSize();
  20.     }
  21.     public ConcurrentQueue(int size,String name) {
  22.         QUEUE_SIZE = size;
  23.         QUEUE_NAME = QUEUE_NAME+"["+name+"]";
  24.         QUEUE = new Queue();
  25.         printQueueSize();
  26.     }
  27.     /**
  28.      * 入队
  29.      * @param call
  30.      */
  31.     public synchronized void enQueue(Object call) {
  32.         while (QUEUE.size() > QUEUE_SIZE) {
  33.             try {
  34.                 System.out.println(QUEUE_NAME+" wait enQueue....");
  35.                 wait();
  36.             } catch (InterruptedException e) {
  37.                 e.printStackTrace();
  38.             }
  39.         }
  40.         QUEUE.add(call);
  41.         notifyAll();
  42.         //System.out.println("入队");
  43.     }
  44.     /**
  45.      * 出队
  46.      * @param call
  47.      */
  48.     public synchronized Object deQueue() {
  49.         Object call;
  50.         while (QUEUE.isEmpty()) {
  51.             try {
  52.                 System.out.println(QUEUE_NAME+" wait deQueue....");
  53.                 wait();
  54.             } catch (InterruptedException e) {
  55.                 e.printStackTrace();
  56.             }
  57.         }
  58.         call = QUEUE.poll();
  59.         notifyAll();
  60.         //System.out.println("出队");
  61.         return call;
  62.     }
  63.     /**
  64.      * 打印当前队大小
  65.      * @date 2008-11-4
  66.      */
  67.     public int size(){
  68.         return QUEUE.size();
  69.         
  70.     }
  71.     /**
  72.      * 清空队
  73.      * @date 2008-11-4
  74.      */
  75.     public void clear(){
  76.         QUEUE.clear();
  77.     }
  78.     /**
  79.      * 测试队是否有元素
  80.      * @date 2008-11-4
  81.      */
  82.     public boolean isEmpty(){
  83.         return QUEUE.isEmpty();
  84.     }
  85.     /**
  86.      * 打印当前队大小
  87.      * @date 2008-11-4
  88.      */
  89.     private void printQueueSize(){
  90.         System.out.println("Concurrent queue size: "+QUEUE_SIZE);
  91.     }
  92. }

转载地址:http://wcnmd.baihongyu.com/

你可能感兴趣的文章
526. Beautiful Arrangement(python+cpp)
查看>>
712. Minimum ASCII Delete Sum for Two Strings(python+cpp)
查看>>
718. Maximum Length of Repeated Subarray(python+cpp)
查看>>
583. Delete Operation for Two Strings(python+cpp)
查看>>
238. Product of Array Except Self(python+cpp)
查看>>
817. Linked List Components(python+cpp)
查看>>
462. Minimum Moves to Equal Array Elements II(python+cpp)
查看>>
692. Top K Frequent Words(python+cpp)(字典树统计)
查看>>
211. Add and Search Word - Data structure design(python+cpp)(前缀树的升级版)
查看>>
centos 下如何修改网卡名称
查看>>
【源码剖析】Webbench —— 简洁而优美的压力测试工具
查看>>
C语言程序可以没有main函数
查看>>
15分钟成为Git专家
查看>>
2.Echarts3.0--柱状图最详解析及示例
查看>>
1.3PHP数据类型转换
查看>>
1.4PHP常量
查看>>
echarts3.0--地图和其点击事件及地图内文字内容样式位置控制
查看>>
1.5PHP运算符
查看>>
2.1分支结构
查看>>
SpringMVC学习笔记---高级参数绑定
查看>>