`
wujingenli
  • 浏览: 91859 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

自定义队列实现

    博客分类:
  • JAVA
阅读更多
package async;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * 自定义队列
 *
 * @version 2013-9-9
 */
public class Queue<T>
{
    /**
     * 默认队列容量
     */
    private static final int DEFAULT_SIZE = 100;

    /**
     * 队列容量
     */
    private int size;

    /**
     * 队列数据
     */
    private List<T> data = new ArrayList<T>();

    /**
     * 读取锁
     */
    private Object lock = new Object();

    /**
     *
     * 构造函数
     */
    public Queue()
    {
        this.size = DEFAULT_SIZE;
    }

    /**
     *
     * 构造函数
     *
     * @param size
     *            队列容量
     */
    public Queue(int size)
    {
        this.size = size;
    }

    /**
     *
     * 添加任务
     *
     * @param t
     *            任务对象
     * @param isWait
     *            队列满是否等待
     * @return 是否添加成功
     */
    public boolean put(T t, boolean isWait)
    {
        synchronized (lock)
        {
            if (isFull())
            {
                if (isWait)
                {
                    try
                    {
                        lock.wait();
                    }
                    catch (InterruptedException e)
                    {
                        e.printStackTrace();
                        return false;
                    }
                }
                else
                {
                    System.out.println("The queue is full;");
                    return false;
                }
            }
            data.add(t);
            lock.notifyAll();
            return true;
        }
    }

    /**
     *
     * 获取任务
     *
     * @param isWait
     *            队列空是否等待
     * @return 任务对象
     */
    public T get(boolean isWait)
    {
        synchronized (lock)
        {
            if (isEmpty())
            {
                if (isWait)
                {
                    try
                    {
                        lock.wait();
                    }
                    catch (InterruptedException e)
                    {
                        e.printStackTrace();
                        return null;
                    }
                }
                else
                {
                    System.out.println("The queue is empty;");
                    return null;
                }
            }
            T task = data.remove(0);
            lock.notifyAll();
            return task;
        }
    }

    /**
     *
     * 队列是否为空
     *
     * @return 队列是否为空
     */
    public synchronized boolean isEmpty()
    {
        return 0 == data.size();
    }

    /**
     *
     * 队列是否已满
     *
     * @author Jinglong Wu
     * @return 队列是否已满
     */
    public synchronized boolean isFull()
    {
        return this.size == data.size();
    }
}

 

分享到:
评论

相关推荐

    custom_queue:通用对象的自定义队列实现

    `custom_queue`项目旨在提供一个通用的对象自定义队列实现,它允许开发者根据具体需求定制队列的行为,例如添加特殊操作、同步机制或优化性能。该项目依赖于GSON、Google的异步库以及Jackson Core,这些库分别用于...

    ios-自定义Operation队列实现直播礼物动画.zip

    在这个“ios-自定义Operation队列实现直播礼物动画.zip”项目中,开发者利用自定义的`NSOperation`子类来构建一个动画队列,用于处理直播过程中的礼物动画效果。直播礼物动画是提升用户互动体验的重要组成部分,它...

    索引队列-C#中的自定义队列

    标题 "索引队列-C#中的自定义队列" 指向了一个特定的数据结构实现,即在C#编程环境中创建一个支持索引访问...对于.NET开发者而言,掌握这样的自定义队列实现能够提高代码的灵活性和效率,特别是在处理特定类型问题时。

    约瑟夫生死游戏队列实现

    同时,也可以使用链表结构自定义队列实现,这样有利于理解队列的工作原理。 总结来说,约瑟夫生死游戏的解决方法体现了队列数据结构在算法设计中的应用,以及如何通过编程来解决这类循环淘汰问题。通过对这个问题的...

    C++队列实现,封装了数据结构中的队列

    ### 自定义队列实现 在C++中,我们可以通过继承`std::vector`或者使用动态数组来实现一个简单的队列。以下是一个基于动态数组实现的队列示例: ```cpp #include class Queue { private: int* arr; int front; ...

    java 自定义Queue队列

    自定义Queue队列意味着我们需要创建一个类来实现Queue接口,以满足特定的需求或性能优化。 首先,让我们了解一下`java.util.Queue`接口提供的主要方法: 1. `void add(E e)`: 向队列尾部添加元素,如果队列已满,...

    我的画图板1.0<细说1.准备工作,自定义队列>

    3. **设计与实现**:自定义队列的代码结构,可能包括节点结构定义、队列操作函数(如enqueue、dequeue、peek等)的实现。 4. **性能考虑**:如何确保队列操作的效率,比如通过使用指针操作减少内存拷贝,或者实现...

    队列queue的实现

    ### 自定义队列实现 虽然C++标准库提供了`std::queue`,但在某些情况下,我们可能需要自定义队列的实现,例如为了优化性能、满足特定需求或进行教学目的。下面是一个简单的基于数组实现的队列: ```cpp template ...

    用Java实现数据结构中的队列

    5. **自定义队列实现** 如果需要自定义队列行为,可以实现`Queue`接口。下面是一个简单的基于数组的队列实现: ```java import java.util.NoSuchElementException; public class MyQueue&lt;T&gt; { private T[] ...

    自定义队列,XML,文件夹

    本文将深入探讨Java中自定义队列的操作、XML文件的处理以及如何进行文件夹操作。 首先,让我们来讨论自定义队列。在计算机科学中,队列是一种先进先出(FIFO)的数据结构,它在Java中可以通过实现`java.util.Queue`...

    android自定义消息队列

    在Android中,最常用的消息队列实现是Handler、Looper和Message的组合。Handler负责发送和处理消息,Looper是消息循环器,它不断从消息队列中取出消息并分发,而Message则用来承载要传递的数据。然而,为了实现...

    C++代码Queue队列

    在这个自定义队列实现中,我们使用了环形数组来避免数组满后重新分配内存的问题。`enqueue`和`dequeue`方法分别实现了入队和出队操作,`isEmpty`和`isFull`检查队列的状态。 队列在许多实际应用中都有广泛用途,...

    java多线程模拟队列实现排队叫号

    2. 优先级:如果需要根据某些条件(如VIP客户)调整服务顺序,可以使用`PriorityQueue`或自定义队列实现。 3. 异常处理:线程可能会抛出异常,需要妥善处理,避免整个程序崩溃。 4. 信号量控制:如果服务窗口数量...

    spring 整合activemq实现自定义动态消息队列

    本文档参考了纯粹的activemq java代码和百度上的demo,很简洁的实现了动态消息队列的生成和获取,但是没有自定义监听(当前项目不需要),本文档只有功能实现类 即业务层。若要调用和推送 则需要自己根据需求编写。...

    C++队列代码

    在某些特定场景下,可能需要自定义队列实现,例如为了优化性能或者实现特殊功能。这时,可以使用C++的继承机制,创建一个新的类来继承`std::queue`,并覆盖其成员函数。自定义队列通常需要重写`push`、`pop`、`front...

    自己的队列类模板 Own queue class template

    标题中的“自己的队列类模板 Own queue class template”指的是创建一个符合C++标准模板库(STL)接口的自定义队列实现。下面我们将详细探讨如何设计这样一个队列类模板,以及`push`, `pop`, `destroy`, `front`, `...

    Java基础复习笔记06数据结构-队列

    #### 自定义队列实现 除了使用标准库提供的队列实现外,根据特定需求,开发者也可以自定义队列的实现。例如,上述代码片段展示了如何使用数组实现一个简单的队列`MyArrayQueue`。这个类实现了`Queue`接口,包含了...

    C++数据结构 -- 队列

    二、自定义队列实现 在某些场景下,我们可能需要自定义队列,例如为了优化性能或者实现特定功能。自定义队列通常需要两个基本操作:入队(enqueue)和出队(dequeue)。我们可以使用链表或者数组作为底层数据结构来...

    queue-link.zip_C++队列_打印 队列_队列

    5. **自定义队列实现** 如果需要更高级的功能,如优先级队列,可以使用`std::priority_queue`。另外,通过继承`std::queue`并重载相关操作,可以实现自己的队列类,例如添加打印所有元素的方法。 6. **总结** C++...

    基于vi服务器和队列的程序架构_VI服务器_labview_

    在LabVIEW中,可以使用内置的FIFO(先进先出)队列或者自定义队列实现这一功能。队列机制可以有效地管理任务调度,特别是在高并发环境中,能避免资源争抢,提高程序执行效率。 队列在程序架构中的应用通常包括以下...

Global site tag (gtag.js) - Google Analytics