Java线程池实现例子_第1页
Java线程池实现例子_第2页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 5/5Java线程池实现例子 这是我从网上裆下来的一个线程池例子,因为是菜鸟,也是看了有一会儿才看懂了,希望能帮到其他的菜鸟们; 说下实现思路: PoolManager:创建了一个ArrayList用来存放实例化好的线程对象:一个线程可以帮助一个任务去执行:工厂 Worker:也就是工人的意思:就是实例化好的线程,放到了线程池工厂里,有一批新货(任务)就找一个空闲的线程(工人)去做这件事:工厂里的工人 TaskManager:任务(新货)需要放到一个临时的仓库:这个类就是这个仓库:接到任务的工人从这个仓库里拿需要执行的任务:需要干的活的仓库 TaskNibutirThread:哪件事情由那个

2、人去做,仓库里有没有货,工厂里有没有闲着的工人,都是这个类负责的:负责分配任务的主管 WorkTask:任务的接口其他的是它的实现类,用来放到仓库里执行的 package com.threadpool; import java.util.ArrayList; /* * 线程池管理器(PoolManager):用于创建并管理线程池,采用单例模式 * */ public class PoolManager public static PoolManager mPool=new PoolManager(); public final int max_pool =3; public final int

3、 max_Tasks = 15; public static ArrayList init_pools; / private int GetIdleThreadPollTime=50;/获取空闲线程轮询间隔时间,可配置 private TaskMonitorThread mainThread;/任务监测线程 static init_pools = new ArrayList(5); public static PoolManager getInstance() if (mPool = null) mPool = new PoolManager(); return mPool; /获取空闲线程

4、public Worker getIdleThread() Worker working =null; while(true) synchronized(init_pools) for (int i = 0; i workqueue =new LinkedList();/ 缓冲队列 /* * 向工作队列中加入一个任务,由工作线程去执行该任务 * * param task */ public synchronized static void addTask(WorkTask worktask) if (worktask != null /*com.yulin.threadpool.WorkTas

5、kImp44f4ac30, com.yulin.threadpool.WorkTaskImp44f4ad60, com.yulin.threadpool.WorkTaskImp44f4ae00, com.yulin.threadpool.WorkTaskImp44f4aea0, com.yulin.threadpool.WorkTaskImp44f4af40*/ /* * 从工作队列中取出一个任务 * * return * throws InterruptedException */ public synchronized static WorkTask getTask() throws In

6、terruptedException while (workqueue.size() 0) return (WorkTask) workqueue.removeFirst(); return null; package com.threadpool; public final class TaskMonitorThread extends Thread /private PoolManage threadPool; private int GetWorkTaskPollTime = 10;/ 监测任务轮询时间,可配置 /*public TaskMonitorThread(PoolManage

7、pool) System.out.println(正在创建任务监测线程.); this.threadPool = pool; */ public TaskMonitorThread() System.out.println(正在创建任务监测线程.); Override public void run() / TODO Auto-generated method stub while (true) try WorkTask task = TaskManager.getTask(); if (task = null) try Thread.sleep(5000); catch (Interrupt

8、edException e) / TODO Auto-generated catch block e.printStackTrace(); else Worker t = PoolManager.getInstance().getIdleThread();/ 获取空闲线程 System.out.println(Worker.toString()=?+t.toString(); if (t = null) break; t.setWorkTask(task);/ 设置线程任务 System.out.println(task.toString()=?+task.toString(); t.setI

9、sRunning(true);/激活空闲线程 System.out.println(Worker.toString()=?+t.getIsrunning( ); / try /Thread.sleep(GetWorkTaskPollTime); / catch (InterruptedException e) / TODO Auto-generated catch block e.printStackTrace(); package com.threadpool; /* * 线程池测试类,测试功能如下: * 1、测试线程池创建功能 * 2、测试处理并发请求功能 * 3、测试关闭功能 */ pu

10、blic class TestThreadPool public static void main(String args) /创建线程池,开启处理请求服务 PoolManager pool=PoolManager.getInstance(); pool.init(); /接收客户端请求 WorkTask task1=new WorkTaskAImp(执行超时任务1.); TaskManager.addTask(task1); final int requestCount=15; for(int i=0;iTask1, this.param); System.out.println(=Task

11、1+this.param); Override public void cancelTask() / TODO Auto-generated method stub Override public int getProgress() / TODO Auto-generated method stub return 0; package com.threadpool; /* * 任务类1 * 正常执行的工作任务 */ public class WorkTaskImp implements WorkTask protected String param; public WorkTaskImp() public WorkTaskImp(String param) this.param=param; Override public void runTask() / TODO Auto-generated method stub Syst

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论