`
lj6684
  • 浏览: 971696 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

工作队列示例

    博客分类:
  • Java
阅读更多
在IBM网站查到相关示例,稍作调整,记下来备用
/**
 * 工作队列
 */
public class WorkQueue {

    private final PoolWorker[] threads;
    private final LinkedList<Runnable> queue;
    private static WorkQueue instance = null;
    
    /**
     * 构造工作队列并指定工作队列大小
     * @param nThreads
     * @return
     */
    public static WorkQueue newInstance(int nThreads) {
    	if(instance == null) {
    		synchronized(WorkQueue.class) {
    			if(instance == null) {
    				instance = new WorkQueue(nThreads);
    			}
    		}
    	}
    	return instance;
    }
    
    /**
     * 获得工作队列示例 使用默认大小5
     * @return
     */
    public static WorkQueue getInstance() {
    	if(instance == null) {
    		synchronized(WorkQueue.class) {
    			if(instance == null) {
    				// default set work queue size to 5
    				instance = new WorkQueue(5);
    			}
    		}
    	}
    	return instance;
    }

    /**
     * 私有构造函数
     * @param nThreads
     */
    private WorkQueue(int nThreads) {
        queue = new LinkedList<Runnable>();
        threads = new PoolWorker[nThreads];
        for (int i = 0; i < nThreads; i++) {
            threads[i] = new PoolWorker();
            threads[i].start();
        }
    }

    /**
     * 工作队列中放入执行任务并通知执行线程执行
     * @param r
     */
    public void execute(Runnable r) {
        synchronized (queue) {
            queue.addLast(r);
            queue.notify();
        }
    }

    /**
     * 执行线程
     */
    private class PoolWorker extends Thread {
        public void run() {
            Runnable r;
            while (true) {
                synchronized (queue) {
                    while (queue.isEmpty()) {
                        try {
                            queue.wait();
                        }
                        catch (InterruptedException ignored) {
                        }
                    }
                    r = (Runnable) queue.removeFirst();
                }
                // If we don't catch RuntimeException,
                // the pool could leak threads
                try {
                    r.run();
                }
                catch (RuntimeException e) {
                    // You might want to log something here
                }
            }
        }
    }
}
分享到:
评论

相关推荐

    基于STM32F407的FIFO队列示例程序

    以下是对基于STM32F407的FIFO队列示例程序的详细解释: 1. FIFO队列基础: FIFO队列遵循先进先出的原则,即最早进入队列的元素最早被移出。这种数据结构常用于缓存管理、串口通信和多任务环境中的数据交换。队列...

    workquere工作队列 多线程

    工作队列(Work Queue)是一种在多线程编程中广泛使用的模式,用于协调并发任务的执行,优化系统资源的利用并提高程序的响应速度。在C#中,工作队列通常用于将耗时的任务放入队列,然后由一组后台线程来处理这些任务...

    unity 渲染队列示例

    下面我们将深入探讨Unity渲染队列的工作原理、重要性以及如何在实际项目中应用。 渲染队列的基本思想是将不同的渲染元素分组,每个组都有一个特定的编号,这个编号被称为渲染队列的索引。Unity默认定义了256个不同...

    线程池 工作队列 C++ work Queue 示例

    `WQDemo`这个文件很可能是包含了一个简单的线程池工作队列的示例代码。在这个示例中,开发者可能会展示如何创建线程池、如何向工作队列提交任务、以及如何处理任务的执行结果。通过阅读和理解这个示例,你可以了解到...

    .NET-C#队列示例

    在这个".NET-C#队列示例"中,我们将探讨如何在C#中创建、操作和使用队列。 首先,C#通过System.Collections命名空间中的Queue类来实现队列。要创建一个队列,可以简单地实例化Queue对象: ```csharp Queue myQueue...

    进程间通信:消息队列示例代码

    在提供的压缩包文件“消息队列示例代码”中,可能包含以下关键部分: 1. **消息结构体定义**:定义一个结构体,包含消息类型和消息体。例如: ```c struct msgbuf { long mtype; // 消息类型 char mtext[100]; //...

    易语言写的一个非常高性能稳定的队列示例.zip

    在这个“易语言写的一个非常高性能稳定的队列示例”中,我们可以深入探讨易语言如何实现高效稳定的队列以及其相关原理。 易语言是一种以中文编程为特色的编程语言,旨在降低编程的门槛,使得更多的人能够参与到编程...

    activeMQ消息队列的简单示例代码

    在这个“activeMQ消息队列的简单示例代码”中,我们将探讨如何使用ActiveMQ进行基本的消息发布与订阅。 首先,要了解ActiveMQ的基本概念: 1. **消息**:在ActiveMQ中,数据以消息的形式在生产者和消费者之间传输...

    linux 消息队列使用示例

    本文将详细解析标题“linux消息队列使用示例”中涉及的知识点,并通过描述中的简单示例代码来理解消息队列的工作原理。 首先,我们需要了解消息队列的基本概念。消息队列是内核维护的一个特殊的数据结构,它存储由...

    微软消息队列MSMQ示例

    - **文档说明**:解释了示例代码的工作原理和如何运行,帮助开发者理解MSMQ的核心概念和技术细节。 - **测试用例**:可能包含了一些测试场景,帮助验证代码的正确性和性能。 - **配置指南**:指导如何设置环境以运行...

    springboot+rabbitmq整合简单消息队列示例.zip

    807301762022-10-08 11:30:59springboot+rabbitmq整合简单消息队列示例 项目描述 rabbitmq简单示例 运行环境 jdk8+tomcat8+rabbitmq+IntelliJ IDEA+maven 项目技术 springboot+rabbitmq安装调试 数据库文件 ...

    消息队列编程C++编程示例

    消息队列编程C++示例 消息队列编程是一种进程间通信机制,在 Unix 系统 V 版本中广泛应用。消息队列是一个链表,存储着具有特定格式和优先级的消息记录。对消息队列有写权限的进程可以添加新消息,而对消息队列有读...

    redis消息队列

    本文将深入探讨 Redis 消息队列的工作原理、实现方式以及相关的源码示例。 一、Redis 消息队列的工作原理 1. 队列结构:Redis 中的消息队列通常使用 List 或 Stream 数据结构实现。List 可以看作是先进先出(FIFO...

    Android中的线程池与任务队列

    本文将深入探讨Android中线程池与任务队列的概念、工作原理以及它们如何协同工作。 线程池(ThreadPool)是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池可以避免因...

    工作队列池,线程池

    标题中的“工作队列池”和“线程池”是计算机科学中用于处理并发和多线程编程的重要概念。在高并发环境下,有效地管理和调度线程对于系统的性能和稳定性至关重要。接下来,我们将深入探讨这两个概念及其相关知识。 ...

    线程池参考

    清单1所示的简单工作队列示例可能如下: ```java public class ThreadPool { private final List&lt;Thread&gt; threadPool; private final Queue&lt;Runnable&gt; taskQueue; public ThreadPool(int poolSize) { ...

    java模拟阻塞队列

    Java中的阻塞队列是一种基于同步原语的高级数据结构,它在多线程编程中扮演着重要角色,尤其在并发处理和优化系统资源利用率...在实际项目中,阻塞队列常用于消息队列、线程池的工作队列等场景,是并发编程的重要工具。

    C++基于消息队列的多线程实现示例代码

    实现消息队列的关键因素是考量不同线程访问消息队列的同步问题。本实现涉及到几个知识点 std::lock_guard 介绍 std::lock_gurad 是 C++11 中定义的模板类。定义如下: template &lt;class&gt; class lock_guard; lock_...

    C++实现队列源代码

    队列是一种基本的线性数据结构,遵循"先进先出"(FIFO)的原则,类似于现实生活中的排队等待。在这个数据结构实验中,我们将关注如何使用C++来实现一个队列。 首先,我们来看`MyQueue.h`这个头文件。这个文件通常会...

Global site tag (gtag.js) - Google Analytics