import java.util.LinkedList;
public class WorkQueue
{
private final int nThreads;
private final PoolWorker[] threads;//工作队列池,线程池
private final LinkedList queue;//任务列表
public WorkQueue(int nThreads)
{
this.nThreads = nThreads;
queue = new LinkedList();
threads = new PoolWorker[nThreads];
for (int i=0; i<nThreads; i++) {
threads[i] = new PoolWorker();
// threads[i].setDaemon(true);
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();
System.out.println(r);
}
// If we don't catch RuntimeException,
// the pool could leak threads
try {
r.run();
}
catch (RuntimeException e) {
// You might want to log something here
}
}
}
}
public static void main(String[] args) {
//申请5个备用工作线程池
WorkQueue sdf = new WorkQueue(5);
//并发15个或者更多线程任务
for (int i=0;i<100;i++) {
sdf.execute(new taskThread());
}
}
}
分享到:
相关推荐
1. 工作线程(Worker Threads):池中的线程,负责执行任务。 2. 任务队列(Task Queue):存储待执行任务的地方,线程从这里获取任务并执行。 3. 控制机制:如线程数量限制,超时策略等,用于控制线程的生命周期和...
"队列:队列在线程池等有限资源池中的应用" 在计算机科学中,队列是一种基本的数据结构,它可以用来解决许多实际问题。队列的概念非常简单,可以想象成排队买票,先来的先买,后来的人只能站末尾,不允许插队。队列...
### 队列在线程池等有限资源池中的应用 #### 队列的基本概念 队列是一种线性数据结构,遵循先进先出(First In First Out, FIFO)的原则,即最先加入队列的元素会被最先移除。队列支持两种主要操作:入队(enqueue...
### glib库异步队列和线程池代码分析 #### 一、异步队列原理与实现 异步队列是一种高效的线程间通信机制,用于在多线程环境中同步共享数据。它通过将数据组织成队列的形式,允许线程在不阻塞的情况下进行读写操作...
线程池是多线程处理中常用的一种技术,它预先创建一定数量的线程,并将它们组织成池,用于执行异步任务。线程池的大小是有限的,不可能无限制地创建线程。如果线程池中的线程都忙于执行任务,而此时又有新的任务需要...
在计算机科学中,队列在处理有限资源的场景中,如线程池,扮演着重要的角色。线程池是预先设定大小的线程集合,用于管理并发任务的执行。当线程池达到其最大容量时,新请求的任务不会立即执行,而是被放入队列等待,...
线程池的工作原理是通过维护一定数量的工作线程,这些线程可以被重复利用来执行提交给池的任务。线程池的使用可以有效地减少线程创建和销毁的开销,控制并发执行的数量,避免过度创建线程导致资源耗尽,还可以对线程...
### 线程池与工作队列:Java理论与实践 #### 一、线程池的概念及重要性 线程池是一种广泛应用于服务器应用程序的技术,主要用于优化资源利用效率,提高程序响应速度,并确保系统的稳定性和可靠性。在多线程编程...
2. **工作线程**:线程池中的线程负责从任务队列中取出任务并执行。这些线程通常在一个无限循环中运行,直到线程池被关闭。 3. **提交接口**:供用户提交任务到线程池的API,应保证线程安全。 4. **线程同步机制**...
线程池的设计可能包括基本的线程管理、任务队列、线程复用等功能,旨在帮助开发者更高效地利用多核处理器的能力,同时简化并发编程的复杂性。 描述中提到的“全部源代码”,意味着这个压缩包包含了一个完整的Delphi...
线程池是一种多线程处理形式,预先创建一定数量的线程,放入池中,当有任务需要执行时,直接从池中获取线程来执行任务,而不是每次都创建新的线程,从而提高了系统资源的利用率,降低了系统开销。 线程池的核心组件...
**并发服务器**的实现通常利用线程池或进程池,主线程(生产者)接收客户端请求并将其分配给工作线程(消费者)处理。这种方式使得服务器能够同时处理多个客户端连接,极大地提高了服务端的并发处理能力。 总结起来...
ThreadPoolExecutor类提供了多种方法来控制线程池的大小和优先级,例如setCorePoolSize()方法用于设置线程池的核心池大小,setMaximumPoolSize()方法用于设置线程池的最大池大小,等等。 知识点3:任务队列的实现 ...
本篇将详细探讨Socket线程池的概念、工作原理以及它如何解决多个线程对同一个套接字进行写操作的问题。 首先,我们来理解什么是Socket。Socket是网络上的进程间通信(IPC)的一种接口,允许两台计算机通过Internet...
在IT行业中,线程池和消息队列是两种非常重要的并发处理和系统间通信机制。本文将基于给定的标题“Java实现的线程池、消息队列功能”来详细阐述这两个概念及其在Java中的实现。 首先,我们来讨论线程池。线程池是一...
4. **进程池线程池**:ACL框架提供了进程池和线程池的管理工具,这有助于减少进程和线程的创建销毁开销,改善系统的响应速度和资源利用率。通过合理调度和复用,可以避免频繁的上下文切换,提升整体系统的运行效率。...
线程池是一种多线程处理形式,预先创建一组线程,当有任务需要执行时,任务会被放入队列,由线程池中的空闲线程进行处理。在drm_server1.1服务中,线程池设计用于平衡系统负载,避免频繁地创建和销毁线程带来的开销...
任务池则是一种任务调度机制,它将待处理的任务放入一个队列,由线程池中的线程按顺序或并行地从队列中取出任务进行执行。这种方式使得任务的提交和执行解耦,简化了并发编程的复杂性。 在C++中,虽然标准库并没有...
C语言实现线程池时,首先需要包含`pthread.h`头文件,然后定义线程池结构体,通常包括线程数组、任务队列和同步结构体。接下来,创建线程池需要初始化这些元素,启动工作线程并设置一个循环来接收和处理任务。当...