当前位置: 首页 > news >正文

网站模版更新公告花都网站开发

网站模版更新公告,花都网站开发,科技网站大全,做网站注册营业执照Worker的实现 总体来说我们首先需要实现一个Worker线程类#xff0c;让他的线程实例拿取任务然后执行任务。 //worker主要是从jobs中拿工作#xff0c;拿不到等#xff0c;拿到了执行。class Worker implements Runnable{private volatile boolean running true;Overrid…Worker的实现  总体来说我们首先需要实现一个Worker线程类让他的线程实例拿取任务然后执行任务。 //worker主要是从jobs中拿工作拿不到等拿到了执行。class Worker implements Runnable{private volatile boolean running true;Overridepublic void run() {while (running){Job job null;synchronized (jobs){while (jobs.isEmpty()){try{jobs.wait();} catch (Exception e){Thread.currentThread().interrupt();return;}}job jobs.removeFirst();}if (job ! null){job.run();}}}public void shutdown(){running false;}} 由此我们引出了需要一个集合来保存worker。 private final ListWorker workers Collections.synchronizedList(new ArrayListWorker()); 同时worker需要拿取任务任务需要保存在一个队列中所以引出来了jobs队列。 private final LinkedListJob jobs new LinkedList(); 线程池的初始化 前提工作准备好了我们可以开始去实现一个简易的线程池。 初始化就免不了要提起那设定好初始化的数值。 private static final int DEFAULT_WORKER_NUMBERS 5;private int workerNum DEFAULT_WORKER_NUMBERS;private static final int MAX_WORKER_NUMBERS 10;private static final int MIN_WORKER_NUMBERS 1; 初始工人为5个对应的就是线程池中的核心线程数为5. wokerNum用来即时记录工人数也就是线程池中存活的线程数。 并且限制了最大工人数为10最少工人数为1。对应的是最大线程数为10最少线程数为1。 接下来就可以执行初始化了。 public ThreadExcutor(){InitialWorkers(DEFAULT_WORKER_NUMBERS);}//将worker放入wokers集合中然后开始让worker线程执行。private void InitialWorkers(int num){for (int i 0; i num; i) {Worker worker new Worker();workers.add(worker);Thread thread new Thread(worker,ThreadPool-Worker- i);thread.start();}}//判断num是否在最大和最少工人范围之间在的话将工人数量赋值num不在的话num大于max就复制max小于max就赋值minpublic ThreadExcutor(int num){this.workerNum num MAX_WORKER_NUMBERS ? MAX_WORKER_NUMBERS : Math.max(num, MIN_WORKER_NUMBERS);InitialWorkers(workerNum);} 如果我们调用构造方法时没有传入参数他就直接默认生成5个工人并将它依次加入工人集合中并开启这个工人线程。 如果我们调用传入参数的方法就需要判断传入的参数是否在max和min之间如果在就赋值给workerNum进行记录然后初始化相应的工人线程。如果不在就考虑大于max就初始化max的数量如果小于min就初始化min数量。 线程池的五大基础方法实现 以下四种操作都会涉及到 执行方法 言简意赅就是将job放入jobs队列中然后唤醒jobs队列。 //如果工作不为空就将工作放入工作队列中然后唤醒工作队列public void execute(Job job){if (job ! null){synchronized (jobs){jobs.addLast(job);jobs.notify();}}} 添加工人添加线程 先判断是否超出最大工人数超出了的话强制初始化剩下的工人数。最后别忘了workerNum的即时记录。 //这里初始化时对jobs有操作所以也对jobs进行加锁。添加工人时需要判断加上原来的工人是否超过了最大的工人数//如果超过了就将num赋值成不超过最大工人的最大数量然后去用num数初始化并且将工人数更新成最新。public void addWorks(int num){synchronized (jobs){if (num workerNum MAX_WORKER_NUMBERS){num MAX_WORKER_NUMBERS - workerNum;}InitialWorkers(num);workerNum num;}} 移除工人删除工作线程 这个就是不断地从工人集合中取出工人然后将他们shutdown掉。别忘了workerNum的即时记录。 //先检查删除数是否在工人数之内不在就抛出超出范围的异常。然后在工人集合中不断地取工人然后进行shutdown最后workerNum更新成剩下的工人数。public void removeWorkers(int num){synchronized (jobs){if(num workerNum){throw new IllegalArgumentException(超出范围);}int count 0;while (count num){Worker worker workers.get(count);if (workers.remove(worker)){worker.shutdown();count;}}workerNum - count;}} 获取工作数 //获取工作数public int getJobSize(){return jobs.size();} 停止工人线程 对工人集合进行遍历逐一调用shutdown方法。 //遍历工人集合一个一个关闭public void shutdown(){for (Worker worker : workers) {worker.shutdown();}} 总结 这样一个建议的线程池就实现了。 总的来说增加和构造函数都比较需要初始化方法所以这个记忆要深刻一些。 最后奉上完整代码 public class ThreadExcutorJob extends Runnable {private final ListWorker workers Collections.synchronizedList(new ArrayListWorker());private final LinkedListJob jobs new LinkedList();private static final int DEFAULT_WORKER_NUMBERS 5;private int workerNum DEFAULT_WORKER_NUMBERS;private static final int MAX_WORKER_NUMBERS 10;private static final int MIN_WORKER_NUMBERS 1;public ThreadExcutor(){InitialWorkers(DEFAULT_WORKER_NUMBERS);}//将worker放入wokers集合中然后开始让worker线程执行。private void InitialWorkers(int num){for (int i 0; i num; i) {Worker worker new Worker();workers.add(worker);Thread thread new Thread(worker,ThreadPool-Worker- i);thread.start();}}//判断num是否在最大和最少工人范围之间在的话将工人数量赋值num不在的话num大于max就复制max小于max就赋值minpublic ThreadExcutor(int num){this.workerNum num MAX_WORKER_NUMBERS ? MAX_WORKER_NUMBERS : Math.max(num, MIN_WORKER_NUMBERS);InitialWorkers(workerNum);}//如果工作不为空就将工作放入工作队列中然后唤醒工作队列public void execute(Job job){if (job ! null){synchronized (jobs){jobs.addLast(job);jobs.notify();}}}//遍历工人集合一个一个关闭public void shutdown(){for (Worker worker : workers) {worker.shutdown();}}//这里初始化时对jobs有操作所以也对jobs进行加锁。添加工人时需要判断加上原来的工人是否超过了最大的工人数//如果超过了就将num赋值成不超过最大工人的最大数量然后去用num数初始化并且将工人数更新成最新。public void addWorks(int num){synchronized (jobs){if (num workerNum MAX_WORKER_NUMBERS){num MAX_WORKER_NUMBERS - workerNum;}InitialWorkers(num);workerNum num;}}//先检查删除数是否在工人数之内不在就抛出超出范围的异常。然后在工人集合中不断地取工人然后进行shutdown最后workerNum更新成剩下的工人数。public void removeWorkers(int num){synchronized (jobs){if(num workerNum){throw new IllegalArgumentException(超出范围);}int count 0;while (count num){Worker worker workers.get(count);if (workers.remove(worker)){worker.shutdown();count;}}workerNum - count;}}//获取工作数public int getJobSize(){return jobs.size();}//worker主要是从jobs中拿工作拿不到等拿到了执行。class Worker implements Runnable{private volatile boolean running true;Overridepublic void run() {while (running){Job job null;synchronized (jobs){while (jobs.isEmpty()){try{jobs.wait();} catch (Exception e){Thread.currentThread().interrupt();return;}}job jobs.removeFirst();}if (job ! null){job.run();}}}public void shutdown(){running false;}} }
http://www.pierceye.com/news/646404/

相关文章:

  • 南宁手机建站公司常德网站开发服务
  • 智能锁东莞网站建设php网站开发需要学什么软件
  • 扒网站样式中国搜索网站排名
  • 网站空间和云服务器建设建材网站费用
  • 公司网站 正式上线wordpress 移动端不显示
  • 旅行网站排名前十名网站检测报告哪里做
  • 随州做网站wordpress 显示评论内容
  • 网站建设时间计划表非常赚又一个wordpress站点
  • 苏州网站小程序app开发公司wordpress如何上传文件大小
  • 同仁行业网站建设报价免费ui网站
  • 网站打开速度慢wordpress开发者选项怎么打开
  • 免费网站代理访问网站 营销型
  • 甘特图模板关于网站建设永嘉移动网站建设公司
  • 网站建设服务协议书做面包有哪些网站知乎
  • 网站建设评比标准建盏茶杯知识
  • 商城网站建设教学电子商务的就业方向
  • 做网站必要性江苏华江建设集团网站
  • 网站建设丿金手指排名9如何百度搜到网站
  • 南昌商城网站建设央企网站群建设中标公告
  • 湖北建设监理协会网站网页游戏排行榜开服时间
  • 中国空间站图片竞价账户托管公司哪家好
  • 湖南省金力电力建设有限公司 网站广州市建设局官方网站
  • 比价网站源码免费域名领取
  • 温州做网站费用怎么推广自己的偏方
  • 鞍山建站wordpress侧边浮动
  • 江西网站优化临海外发加工网
  • 机械做网站好处无锡网络推广服务
  • 电信网站备案管理系统外贸网站推广的方法
  • 什么网站上公司的评价最客观需要做网站建设和推广的行业
  • 百度人工服务24小时电话四川seo技术培训