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());
}
}
}
分享到:
相关推荐
队列:队列在线程池等有限资源池中的应用
09丨队列:队列在线程池等有限资源池中的应用.pdf
09队列:队列在线程池等有限资源池中的应用.pdf
你可以用我们第 3 节、第 4 节讲的算法复杂度分析方法,自己试着分析一下。接下来,我们再来看下基于链表的队列实现方法。基于链表的实现,我们同样需要两个指针:h
golang worker pool ,线程池 , 工作池 并发限制goroutine池。 限制任务执行的并发性,而不是排队的任务数。 无论排队多少任务,都不会阻止提交任务。 通过队列支持 golang 工作池公共库 支持最大任务数, 放到工作池...
corePoolSize:核心池的大小,在创建了线程池后,线程池中的线程数为0,当有任务来之后,就会创建一个线程去执行任务,当线程池中的线程数目达到corePoolSize后,就会把到达的任务放到缓存队列当中; ...
当一个新任务需要运行时,如果线程 池中有等待的工作线程,就可以开始运行了;否则进入等待队列。 为什么要用线程池: 1.减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务 2.可以根据...
网上有现成的cthreadpool的代码,是c版的,且没有任务队列功能,不能做到任务的安全退出,根据实际需要写了一个c++版的,本程序实现了c++的封装,并实现了任务池和线程安全退出。弥补了c版的不足 在linux调试通过并...
保证线程安全的Qt线程池使用,线程任务可以和其他线程通信,使用场景:频繁操作的I/O操作或是耗时操作。
线程池头文件: //任务 struct task { void *(*task)(void *arg); void *arg; struct task *next; }; //线程池 typedef struct thread_pool { pthread_mutex_t lock;//互斥锁 pthread_cond_t cond;//条件变量...
C语言版现成池 任务队列 可扩展为线程组
库包含许多可重用的基类: -易于使用的对象池; -帮助项目处理并行化; -快速线程池,可动态调整线程数; -简化常见的线程启动/停止方案; 极快的轻量级信号灯; 具有阻塞的线程安全队列(比BlockingCollection快5...
本项目是基于C++11的线程池。... 启动线程池,并通过run()执行任务 > threadpool.exec();封装任务到任务队列中 > threadpool.waitForAllDone();等待所有任务执行完成 > threadpool.stop();分离线程,释放内存
设置线程空闲回收的时间,也可以在创建()的第三个参数中设置,此命令可以在线程池工作中设置。 3. 置_最大线程数() 设置最大线程数量,也可以在创建()的第二个参数中设置,此命令可以在线程池工作中设置。 4. ...
代码如下://单位秒,监测空闲列表时间间隔,在空闲队列中超过TASK_DESTROY_INTERVAL时间的任务将被自动销毁const int CHECK_IDLE_TASK_INTERVAL = 300;//单位秒,任务自动销毁时间间隔const int TASK_DESTROY_...
Maginatics线程池ThreadPool是线程池模式的C ++实现,允许将任意任务排队以由专用工作线程池执行。 它是仅标头的库,并且需要带有对Boost.Thread接口的版本4的支持。 Nathan Rosenblum)最初是ThreadPool,他是...
C++学习笔记和实践项目,实践项目包括Json工具类、设计模式的C++实现、消息队列、智能指针,linux下的并发控制工具、线程池,epoll管理器和Mysql连接池、STL容器的快捷输出工具和页面置换算法(FIFO, LRU, LFU)的...
我的线程池结构包含一个全局的期货队列,一个工作线程队列,一个条件变量,用于通知何时准备好执行任务,以及一个锁来控制池中的所有数据。 它还包括一个关闭标志和一个在执行开始时同步所有线程的屏障。 这是为了...
它一开始就初始化了一定数量的线程,并通过ProcessQueuedItems方法保证异步执行进入池中的队列任务 这样在分配异步任务的时候,就省去了频繁去创建(new)一个线程 初始化线程池 添加线程操作 线程池事件 结束线程...