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

不错的线程队列

    博客分类:
  • Java
阅读更多

import java.util.LinkedList;

public class WorkQueue {

	private final int nThreads;// 线程池的大小
	private final PoolWorker[] threads;// 用数组实现线程池
	private final LinkedList<Runnable> queue;// 任务队列

	public WorkQueue(int nThreads) {
		this.nThreads = nThreads;
		queue = new LinkedList<Runnable>();
		threads = new PoolWorker[nThreads];

		for (int i = 0; i < nThreads; i++) {
			threads[i] = new PoolWorker();
			threads[i].start();// 启动所有工作线程
		}
	}

	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();// 有任务时,取出任务
				}
				try {
					r.run();// 执行任务
				} catch (RuntimeException e) {
					// You might want to log something here
				}
			}
		}
	}

	public static void main(String args[]) {
		WorkQueue wq = new WorkQueue(1);// 10个工作线程
		Mytask r[] = new Mytask[5];// 20个任务

		for (int i = 0; i < 5; i++) {
			r[i] = new Mytask();
			wq.execute(r[i]);
		}
	}
}

class Mytask implements Runnable {// 任务接口
	public void run() {
		String name = Thread.currentThread().getName();
		try {
			Thread.sleep(5000);// 模拟任务执行的时间
		} catch (InterruptedException e) {
		}
		System.out.println(name + " executed OK");
	}

}
 
分享到:
评论

相关推荐

    多线程队列源代码

    这里我们讨论的"多线程队列源代码"是一个实现了多线程和队列数据结构的程序,它包含了一个多线程队列的实现以及对应的测试程序。 首先,让我们理解一下多线程的概念。在计算机编程中,多线程是指一个程序中可以同时...

    MFC的多线程队列程序源代码

    本示例中的"多线程队列程序源代码"是一个很好的实践案例,用于理解多线程和队列的原理及其在实际编程中的应用。 首先,我们要明白多线程的概念。在单线程程序中,任务是顺序执行的,而在多线程程序中,可以同时执行...

    java 多线程 队列工厂

    在Java编程中,多线程和队列是两个非常重要的概念,它们对于构建高效、可扩展的并发应用程序至关重要。队列工厂则是实现多线程间通信和任务调度的一种设计模式,它提供了一种抽象和统一的方式来创建和管理队列实例。...

    多线程 队列利用

    结合标题“多线程队列利用”,我们可以推断文章可能主要讨论如何在多线程环境中有效利用队列来提升程序性能。这可能包括以下内容: 1. **线程安全的队列实现**:在多线程环境中,为了保证数据的一致性和完整性,...

    易语言简单的多线程消息队列

    易语言简单的多线程消息队列。@Patek。

    多线程任务队列

    在编程领域,尤其是在性能敏感的系统中,多线程任务队列是一种常见且重要的设计模式。这个主题主要涉及C++编程语言,它利用了C++的特性来实现高效的并发处理。下面将详细介绍“多线程任务队列”的概念、工作原理以及...

    多线程队列

    本文将深入探讨如何在C语言中实现多线程队列及其相关的知识点。 首先,多线程是指在一个进程中创建多个执行线程,每个线程可以并发执行不同的任务。这样可以充分利用多核处理器的计算能力,提高程序的运行效率。在...

    Fig15_11-12.rar_C#线程队列_c# 多线程 队列

    在C#编程中,线程队列是一种管理并发执行任务的有效机制,特别是在处理大量异步操作时。本文将深入探讨“C#线程队列”及其在“多线程”环境中的应用,以及如何利用队列来实现“读者写者”问题的解决方案。 一、C#...

    C#队列Queue多线程用法实例

    队列在多线程环境下常常用于任务调度、消息传递等场景,因为它们能有效地管理和同步数据访问。本实例将详细讲解如何在多线程中使用C#的Queue类。 首先,我们创建一个队列实例,通过`new Queue()`来指定存储的数据...

    spring 多线程队列执行

    在Spring框架中,多线程队列执行是一个重要的性能优化策略,它可以帮助应用程序更高效地处理并发任务,尤其是在高负载和大数据量的场景下。本文将深入探讨Spring如何实现多线程队列以及其相关的核心概念和技术。 1....

    c# 线程安全队列的用法原理及使用示例

    什么是线程安全? 答:线程安全是多线程编程时的计算机程序代码中的一个概念。在拥有共享数据的多条线程...先看下线程安全队列的用法: ConcurrentQueue&lt;int&gt; ts = new System.Collections.Concurrent.ConcurrentQueue

    多线程与循环队列

    此外,条件变量(Condition Variable)可以用于通知线程队列状态的变化,如非空或非满状态,以便线程在等待时可以释放CPU资源。 总结来说,多线程中的循环队列是一种强大的工具,它结合了多线程的并发优势和循环...

    Linux下使用EPoll+队列+多线程的C++实现

    在C++实现中,可能会使用`std::thread`库来创建和管理线程,使用`std::queue`作为请求队列的数据结构,使用互斥锁(`std::mutex`)和条件变量(`std::condition_variable`)来保证队列操作的线程安全。线程池会定期...

    C++实现线程安全队列

    在C++中,我们可以使用互斥量(Mutex)来实现线程安全的数据结构,如队列。本主题将详细介绍如何在C++中使用互斥量实现线程安全的队列,并通过测试代码验证其正确性。 首先,我们需要了解线程安全队列的基本设计。...

    workquere工作队列 多线程

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

    C++多线程队列

    构造一个队列,并完成入队列和出队列的函数,要求该队列支持多线程 (即一个线程做入队列操作而另一个线程做出队列操作而且两个线程必须同时运行)

    支持多线程和泛型的阻塞队列

    阻塞队列是一种在多线程编程中广泛使用的并发数据结构,它在计算机科学和编程领域,特别是Java和C++等面向对象语言中扮演着重要角色。标题中的“支持多线程和泛型的阻塞队列”意味着我们讨论的是一个能够同时处理多...

    线程消息队列

    线程消息队列是并发编程中一种常见的同步和通信机制,尤其在多线程环境和异步处理中扮演着重要角色。它通过提供一个数据结构,即消息队列,来协调多个生产者线程和一个或多个消费者线程之间的交互。这种设计模式允许...

Global site tag (gtag.js) - Google Analytics