- 浏览: 11390 次
最新评论
转载地址:http://www.ibm.com/developerworks/cn/java/l-threadPool/#icomments
1. 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
2. 工作线程(WorkThread): 线程池中线程
3. 线程池ThreadPool
4. 线程池管理器(ThreadPoolManager):用于创建并管理线程池
1. 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
/** * <p>Title: </p> * <p>Description: use to test thread pool</p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: </p> * * @author xingyong * * @version 1.0 */ public interface Task { /** * set status of task . * @param flag */ public void setEnd(boolean flag) ; /** * start task * @throws java.lang.Exception */ public abstract void startTask() throws Exception; /** * end tast * @throws java.lang.Exception */ public abstract void endTask() throws Exception; /** * get status of task * @return boolean */ public boolean isEnd() ; }
2. 工作线程(WorkThread): 线程池中线程
import java.io.PrintStream; import java.util.Vector; /** * <p>Title: </p> * <p>Description: use to test thread pool</p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: </p> * * @author xingyong * * @version 1.0 */ public class WorkThread extends Thread { public int threadNum; private boolean flag; private Vector taskVector; private Task task; /** * @param vector * @param i */ public WorkThread(java.util.Vector vector, int i) { flag = true; threadNum = i; taskVector = vector; //hide entry here super.start(); } public void run() { while(flag && taskVector != null) { synchronized(taskVector) { while(taskVector.isEmpty() && flag) try { taskVector.wait(); } catch(Exception exception) { } try { task = (Task)taskVector.remove(0); } catch(Exception ex) { task = null; } if(task == null) continue; } try { task.setEnd(false); task.startTask(); } catch(Exception ex) { ex.printStackTrace(); } try { if(!task.isEnd()) { task.setEnd(true); task.endTask(); } } catch(Exception ex) { ex.printStackTrace(); } }//end of while } public void closeThread() { flag = false; try { if(task != null) task.endTask(); } catch(Exception exception) { exception.printStackTrace(); } synchronized(taskVector) { taskVector.notifyAll(); } } }
3. 线程池ThreadPool
/** * <p>Title: </p> * <p>Description: use to test thread pool</p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: </p> * * @author xingyong * * @version 1.0 *note: this test program refers to Tarak Modi's test structure */ public class TestThreadPool { private ThreadPoolManager threadPoolManager = null; public Object testlock = new Object(); public int count = 0 ; int jobsNumber = 200; int sizeOfThreadPool = 20; int debug = 2; public TestThreadPool(int threadPoolSize,int jobsNum) { //System.out.println("size: "+sizeOfThreadPool+" jobs: "+jobsNumber); sizeOfThreadPool = threadPoolSize; jobsNumber = jobsNum; long timeNoPool = 0; long timePool = 0; count = 0; System.err.println("Begin of testing strategy -- no pool"); long start = System.currentTimeMillis(); try { for(int i=0; i<jobsNumber ; i++) { CalculationTaskTest calculationTask = new CalculationTaskTest(); new Thread(calculationTask).start(); } } catch (OutOfMemoryError er) { System.out.println("No pool :OutOfMemoryError"); } catch (Exception ex) { ex.printStackTrace(); } sleepToWait(5); if(debug > 3) System.out.println("no pool time:" + (System.currentTimeMillis() - start)); timeNoPool = System.currentTimeMillis() - start; System.err.println("End of no pool test"); count = 0; //start = System.currentTimeMillis(); System.err.println("Begin of creating pool"); threadPoolManager = new ThreadPoolManager(sizeOfThreadPool); System.err.println("End of creating pool"); System.err.println("Begin of testing the strategy -- pool"); //without the time for creating pool start = System.currentTimeMillis(); try { for(int i=0; i<jobsNumber ; i++) { CalculationTaskTest calculationTaskTest = new CalculationTaskTest(); threadPoolManager.addTask(calculationTaskTest); } } catch (OutOfMemoryError er) { System.out.println("pool :OutOfMemoryError"+" "+sizeOfThreadPool+" "+jobsNumber); } catch (Exception ex) { ex.printStackTrace(); } sleepToWait(5); if(debug > 3) System.out.println("pool time:" + (System.currentTimeMillis() - start)); timePool = System.currentTimeMillis() - start; System.err.println("End of thread pool test"); System.out.println("without pool: "+timeNoPool+ " with pool: "+timePool); System.exit(0); } public void sleepToWait(long l) { while(true) { synchronized(testlock) { if( count == jobsNumber ) return; } try { //you can change it to wait end of all tasks Thread.sleep(l); } catch (Exception ex) { } } } public static void main(String[] args) { int poolSize = 20; int jobs= 200; if( args.length < 2 ) { System.err.println("Usage: java TestThreadPool " + "<Size of ThreadPool> <jobs> "); System.exit(-1); } try { poolSize = Integer.parseInt(args[0]); jobs = Integer.parseInt(args[1]); } catch (Exception ex) { System.out.println("Please input integer."); System.exit(-1); } new TestThreadPool(poolSize,jobs); } private class CalculationTaskTest implements Task,Runnable { private boolean isEnd = true; public CalculationTaskTest() { isEnd = true; } public void setEnd(boolean flag) { /**@todo: Implement this Task method*/ //throw new java.lang.UnsupportedOperationException("Method setEnd() not yet implemented."); isEnd = flag; } public void run() { int i = 1; int r = 1; //System.err.println("r:"+r); try { //you can change this line to simulate something for(int ii=0;ii<100;ii++) r = r+i*i; } catch (Exception ex) { } synchronized(testlock) { count++; } } public void startTask() throws Exception { /**@todo: Implement this Task method*/ //throw new java.lang.UnsupportedOperationException("Method startTask() not yet implemented."); //System.err.print("use pool"); run(); } public void endTask() throws Exception { /**@todo: Implement this Task method*/ //throw new java.lang.UnsupportedOperationException("Method endTask() not yet implemented."); //free resource here } public boolean isEnd() { /**@todo: Implement this Task method*/ //throw new java.lang.UnsupportedOperationException("Method isEnd() not yet implemented."); return isEnd; } } }
4. 线程池管理器(ThreadPoolManager):用于创建并管理线程池
import java.util.Vector; /** * <p>Title: </p> * <p>Description: use to test simple thread pool</p> * <p>Copyright: Copyright (c) 2002</p> * <p>Company: </p> * * @author xingyong * * @version 1.0 */ public class ThreadPoolManager { /** * the number of threads in pool */ private int threadNum; /** * the default number of threads in pool */ private int defaultThreadNum; /** * the vector of threads in pool */ private Vector workThreadVector; /** * the vector of tasks */ private Vector taskVector; /** * @param i */ public ThreadPoolManager(int i) { taskVector = new Vector(10, 10); //initial thread number defaultThreadNum = 10; if(i > 0) defaultThreadNum = i; //call thread CreateThreadPool(i); } public ThreadPoolManager() { this(10); } /** * * @return */ public boolean isAllTaskFinish() { return taskVector.isEmpty(); } /** * @return int */ public int getThreadNum() { return threadNum; } /** * create thread pool * @param i */ private void CreateThreadPool(int i) { if(workThreadVector == null) workThreadVector = new Vector(i); Object obj = null; //create threads synchronized(workThreadVector) { for(int j = 0; j < i; j++) { threadNum++; WorkThread workThread = new WorkThread(taskVector, threadNum); workThreadVector.addElement(workThread); } } } /** * add task to task vector and notify work Threads in pool * to do it * @param taskObj */ public void addTask(Task taskObj) { if(taskObj == null) return; synchronized(taskVector) { taskVector.addElement(taskObj); taskVector.notifyAll(); } } /** * destroy threads in pool */ public void closeThread() { Object obj = null; while(!workThreadVector.isEmpty()) { try { WorkThread workThread = (WorkThread)workThreadVector.remove(0); workThread.closeThread(); continue; } catch(Exception exception) { exception.printStackTrace(); } break; } } }
相关推荐
易语言简易线程池的实现。 ——V雪落有声V原创。转载请保留。前文:。为了能充分理解本篇文章的内容,需要了解的知识如下:。1.事件对象的使用:http://baike.baidu.com/view/751499.htm。2.信号量的使用:...
在这个简单的线程池实现中,我们可以通过`pthread_pool.cpp`、`MainFunctionForTest.cpp`、`twork_work.cpp`、`pthread_pool.h`和`twork_work.h`这五个文件来理解其基本架构和工作原理。 首先,`pthread_pool.h`...
在Java中,线程池是通过`java.util.concurrent`包中的`ExecutorService`接口及其实现类来实现的,如`ThreadPoolExecutor`。下面我们将深入探讨线程池的工作原理、核心参数以及如何在实际开发中使用线程池。 线程池...
本资源是基于C++11标准实现的一个简单的线程池,它利用了C++11的新特性,如`std::thread`,`std::function`,以及智能指针等。 首先,`std::thread`是C++11引入的用于创建和管理线程的类。通过创建`std::thread`...
简易的C++11线程池实现,线程池为固定方式,后面会新增非固定模式。
本文将深入探讨如何实现一个简单的线程池,并通过提供的文件名`_threadpool.cpp`, `_promain.cpp`, `_threadpool.h`来解释其核心概念和组件。 首先,`_threadpool.h`是头文件,通常包含类定义和相关函数声明。...
下面将详细讨论线程池的原理及其在Java中的实现。 首先,我们来看`ThreadPoolManager`类,这个类通常用于管理线程池,包括初始化线程池、提交任务以及关闭线程池等操作。线程池的大小可以通过参数设置,可以根据...
"线程池的实现以及底层原理" 线程池是Java多线程编程中的一种常见技术,能够提高系统的性能和可靠性。本文将详细介绍线程池的实现原理、线程池的优势、线程池的类型、线程池的创建方式以及线程池的使用注意事项。 ...
### Linux C线程池简单实现实例 #### 概述 在多线程编程中,线程池是一种广泛采用的设计模式。它通过预先创建多个线程,并将它们组织成一个池,来处理提交的任务,从而避免了频繁创建与销毁线程所带来的性能开销。...
标题 "简单线程池与线程池检查的实现" 涉及到的是计算机编程中的多线程管理和优化,特别是线程池的概念及其检查机制。线程池是一种多线程处理形式,预先创建一定数量的线程,放入池中,当有任务需要执行时,直接从池...
本文将深入探讨VC++中线程池的实现,并提供一个简单的实现示例。 线程池的基本概念: 线程池是由一组工作线程组成的集合,这些线程预先创建并处于待命状态,等待执行由应用程序提交的任务。当一个任务被提交到...
本文将深入探讨如何在Visual Studio 2015(VS2015)环境下实现一个简单的线程池,并解析提供的`TestThreadPool.sln`解决方案和`TestThreadPool`源代码文件。 线程池的基本思想是维护一组预先创建的线程,这些线程...
三、简单的C++线程池代码示例 四、 基于boost编写的源码库 - 线程池 4.1 基于boost编写的源码库地址 4.2 boost线程池的先进先出、后进先出、优先级代码示例 五、看看人家线程池怎么写的 - 要理解精髓 六、线程池应用...
线程池的实现,简单的实现了线程池的功能,稍微改动就可以应用到项目中了
易语言简易线程池的实现 ——V雪落有声V原创 转载请保留 前文: 为了能充分理解本篇文章的内容,需要了解的知识如下: 1.事件对象的使用:http://baike.baidu.com/view/751499.htm 2.信号量的使用:...
本项目"简单的线程池的.net实现"提供了一个自定义线程池的示例,帮助开发者更好地理解和运用线程池。 首先,线程池的主要优点在于其资源管理效率。当任务到达时,线程池会检查是否有空闲线程可供使用,如果有的话,...
然而,如果我们想要从头开始理解线程池的工作原理,或者在特定场景下自定义线程池的行为,那么使用`Vector`来实现简单的线程池是一个很好的学习实践。 标题"使用Vector实现简单线程池"指的是将Java中的`Vector`类...
在给定的资源中,"200行C代码实现简单线程池.doc"可能包含了详细的设计和实现步骤,以及如何在实际项目中应用线程池的文档。而"threadpool.c"则是实际的C语言源代码文件,实现了线程池的核心功能。下面我们将探讨...