package org.xml.upload;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class SaveReviewThreadPool {
private ArrayList pool=new ArrayList();
// private List pool = Collections.synchronizedList(new ArrayList());// 线程连接存放容器
private int minThread = 20;// 最小的线程数
private int delayTime = 611;// 刷新线程容器的时间间隔
private int requestThread = 0;// 当前的线程数
private int incrementThreads = 2;// 每次添加的线程
public int getDelayTime() {
return delayTime;
}
public void setDelayTime(int delayTime) {
this.delayTime = delayTime;
}
public int getMinThread() {
return minThread;
}
public void setMinThread(int minThread) {
this.minThread = minThread;
}
public List getPool() {
return pool;
}
public void setPool(ArrayList pool) {
this.pool = pool;
}
public int getIncrementThreads() {
return incrementThreads;
}
public void setIncrementThreads(int incrementThreads) {
this.incrementThreads = incrementThreads;
}
public int getRequestThread() {
return requestThread;
}
public void setRequestThread(int requestThread) {
this.requestThread = requestThread;
}
public SaveReviewThreadPool() {
}
@SuppressWarnings("unchecked")
public void config() {
if (requestThread <= minThread) {
requestThread = minThread;
}
pool = new ArrayList();
for (int i = 0; i < requestThread; i++) {// 初始化线程连接池
SaveReviewThread thread = new SaveReviewThread();
pool.add(thread);
}
}
public SaveReviewThread getThread() {
if (pool == null) { // 如果线程容器为空则新建一个
pool = new ArrayList();
this.addThread();
}
SaveReviewThread thread = findThread();// 在此等候知道能够获得一个有用的线程
while (thread == null) {
wait(delayTime);
System.out.println("正在等候有用的文件保存线程");
thread = findThread();
}
System.out.println("成功获得一个文件保存线程");
return thread;
}
public SaveReviewThread findThread() {
SaveReviewThread thread = null;
synchronized (pool) {
Iterator iter = pool.iterator();// 对线程容器进行跌代,找出一个存在的线程
while (iter.hasNext()) {
thread = (SaveReviewThread) iter.next();
if (thread != null) {
break;
}
}
pool.remove(thread);
}
return thread;
}
@SuppressWarnings("unchecked")
public void addThread() {// 每次运行完一个进程,需要向进程池里添加的进程数量
synchronized (pool) {
if (pool.size() < requestThread) {
for (int i = 0; i < incrementThreads; i++) {
SaveReviewThread newThread = new SaveReviewThread();
pool.add(newThread);
if (pool.size() >= requestThread) {
return;
}
}
}
}
}
private void wait(int mSeconds) {
try {
Thread.sleep(mSeconds);
} catch (InterruptedException e) {
}
}
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
public class SaveReviewThreadPool {
private ArrayList pool=new ArrayList();
// private List pool = Collections.synchronizedList(new ArrayList());// 线程连接存放容器
private int minThread = 20;// 最小的线程数
private int delayTime = 611;// 刷新线程容器的时间间隔
private int requestThread = 0;// 当前的线程数
private int incrementThreads = 2;// 每次添加的线程
public int getDelayTime() {
return delayTime;
}
public void setDelayTime(int delayTime) {
this.delayTime = delayTime;
}
public int getMinThread() {
return minThread;
}
public void setMinThread(int minThread) {
this.minThread = minThread;
}
public List getPool() {
return pool;
}
public void setPool(ArrayList pool) {
this.pool = pool;
}
public int getIncrementThreads() {
return incrementThreads;
}
public void setIncrementThreads(int incrementThreads) {
this.incrementThreads = incrementThreads;
}
public int getRequestThread() {
return requestThread;
}
public void setRequestThread(int requestThread) {
this.requestThread = requestThread;
}
public SaveReviewThreadPool() {
}
@SuppressWarnings("unchecked")
public void config() {
if (requestThread <= minThread) {
requestThread = minThread;
}
pool = new ArrayList();
for (int i = 0; i < requestThread; i++) {// 初始化线程连接池
SaveReviewThread thread = new SaveReviewThread();
pool.add(thread);
}
}
public SaveReviewThread getThread() {
if (pool == null) { // 如果线程容器为空则新建一个
pool = new ArrayList();
this.addThread();
}
SaveReviewThread thread = findThread();// 在此等候知道能够获得一个有用的线程
while (thread == null) {
wait(delayTime);
System.out.println("正在等候有用的文件保存线程");
thread = findThread();
}
System.out.println("成功获得一个文件保存线程");
return thread;
}
public SaveReviewThread findThread() {
SaveReviewThread thread = null;
synchronized (pool) {
Iterator iter = pool.iterator();// 对线程容器进行跌代,找出一个存在的线程
while (iter.hasNext()) {
thread = (SaveReviewThread) iter.next();
if (thread != null) {
break;
}
}
pool.remove(thread);
}
return thread;
}
@SuppressWarnings("unchecked")
public void addThread() {// 每次运行完一个进程,需要向进程池里添加的进程数量
synchronized (pool) {
if (pool.size() < requestThread) {
for (int i = 0; i < incrementThreads; i++) {
SaveReviewThread newThread = new SaveReviewThread();
pool.add(newThread);
if (pool.size() >= requestThread) {
return;
}
}
}
}
}
private void wait(int mSeconds) {
try {
Thread.sleep(mSeconds);
} catch (InterruptedException e) {
}
}
}
发表评论
-
mysql分页查询
2010-11-03 17:01 3355MySql分页存储过程 MySql测试版本:5.0.41-co ... -
svn 权限分配
2010-09-19 11:39 2373转自:http://bbs.iusesvn.com/threa ... -
svn 安装配置-1
2010-09-19 11:38 1064转自:http://minedoc.iteye.c ... -
mysql数据库同步
2008-04-25 16:19 3883windows xp 下设置数据库 ... -
inverse
2008-01-17 10:31 1417前不久在搭建系统框架的时候遇到one-many与many-on ... -
CVSNT
2007-12-31 13:22 1648转自:http://blog.csdn.net/k ... -
mysql备份命令
2007-11-06 20:12 16105还原或者导入数据库命令: mysql -u root --p ... -
spry
2007-06-10 01:03 1570这几天给系统做页面级别的验证,主要是对一些输入参数进行控制。在 ... -
spring 发送html邮件
2007-05-05 19:00 8319对于spring发送邮件的部分看了几天,给小组的项目中添加了 ... -
lucene
2007-04-19 14:29 23131。今天研究了一下lucene ... -
outOfMemory
2006-12-31 16:17 2781收藏源地址:http://blog.s ... -
notify,wait,sleep
2006-12-29 22:29 2432转载别人的http://dev.cs ... -
数据库连接池
2006-12-25 21:31 1437package org.xml.upload; import ... -
arrayList
2006-12-25 21:28 1033private pool=new ArrayList(); p ... -
ArrayList 同步问题
2006-12-25 20:49 3593转载! [JAVA技术集锦]Java技巧:拷贝枚举器以加强效 ...
相关推荐
线程池(threadpool)是计算机程序中一种有效的多线程处理形式,它预先创建一组线程,待有任务需要执行时,从线程池中取出一个线程来执行任务,任务完成后,线程并不销毁,而是返回线程池等待下一次的任务分配。...
Boost库是C++编程语言中的一个流行开源库,提供了丰富的功能,其中包括线程池(Boost.Threadpool)模块。本文将深入探讨如何使用Boost库中的线程池来处理具有优先级的任务,以及普通任务的执行。 首先,我们需要...
线程池(ThreadPool)是一种管理线程资源的有效方式,它在现代并发编程中扮演着至关重要的角色。线程池允许程序预先创建一组线程,而不是每次需要时都创建新的线程,这样可以减少线程的创建和销毁开销,提高系统效率...
在"threadpool.tar.gz"压缩包中,包含两个文件:threadpool.cc和threadpool.h,它们很可能是实现线程池的源代码文件。这里我们将详细讨论C++11引入的线程库以及如何在Linux/MacOS平台上利用这些新特性构建线程池。 ...
【Python】python threadpool python多线程 Python语言基础 文件清单 └── threadpool-1.2.7 ├── CHANGELOG.txt ├── doc │ ├── api │ │ ├── class-tree.html │ │ ├── epydoc.css │ │...
在.NET框架中,`ThreadPool`是一个非常重要的概念,它是一个预先初始化的线程集合,用于高效地执行异步任务。`ThreadPool`管理线程的创建和销毁,优化系统资源的使用,尤其适合处理大量短生命周期的任务。本示例将...
ThreadPool 线程池管理单元 带调用例子
标题 "threadpool_src.zip" 暗示了这是一个关于线程池实现的源代码压缩包。线程池是一种多线程编程中的管理机制,它允许高效地管理和调度多个并发任务,通过预先创建并维护一组可重用的工作线程来提高系统资源利用率...
`ThreadPool-master.zip`中的项目提供了一个线程池的实现示例,旨在帮助程序员理解线程池的调度和管理机制。 线程池的基本思想是预先创建一定数量的线程,这些线程等待待处理的任务。当有新任务到来时,线程池会将...
在C#编程中,线程(Thread)、线程池(ThreadPool)和任务(Task)是并行处理和异步操作的重要组成部分。理解它们的工作原理和使用方法对于优化应用程序的性能至关重要。下面将详细阐述这三个概念及其相关知识点。 ...
通过分析和理解“线程池threadpool_src”的源代码,开发者可以学习如何自定义线程池,如何优化任务调度策略,以及如何在多线程环境下保证程序的稳定性和效率。同时,了解线程池的工作原理对于提升软件的并发处理能力...
Boost Threadpool库是一个高效、灵活且可定制的线程池实现,它被广泛用于多线程编程中,特别是在C++环境中。线程池允许开发者管理一组预创建的线程,而不是为每个任务创建新的线程,这能显著提高程序性能并减少系统...
主要类包括`ThreadWithAttributes`、`ControlRunnable`、`ThreadPool`、`MonitorRunnable`和`ThreadPoolListener`等,这些类构成了线程池的主要框架。 1. **`ThreadWithAttributes`**:这个类负责设置和获取线程...
DELPHI的线程池(ThreadPool)是一种高效管理并发任务的技术,它允许程序在需要时创建线程,而不是每次需要执行任务时都手动创建。线程池通过预先创建一组线程,然后根据需要分配任务,减少了线程创建和销毁的开销,...
QT_ThreadPool是一个基于QT5框架实现的线程池项目,旨在提供一种高效、灵活的多线程处理方式。线程池是一种线程管理机制,它预先创建一组线程,待有任务需要执行时,从线程池中分配线程来执行任务,而不是每次任务...
threadPool的实现代码