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

a5网站建设响应式布局的优点是什么

a5网站建设,响应式布局的优点是什么,杭州公司网站域名续费,网站托管维护代运营目录 一#xff1a;Java内置线程池原理剖析 二#xff1a;ThreadPoolExecutor参数详解 三#xff1a;线程池工作流程总结示意图 四#xff1a;自定义线程池-参数设计分析 1:核心线程数(corePoolSize) 2:任务队列长度(workQueue) 3:最大线程数(maximumPoolSize) 4:最…目录 一Java内置线程池原理剖析 二ThreadPoolExecutor参数详解 三线程池工作流程总结示意图 四自定义线程池-参数设计分析 1:核心线程数(corePoolSize) 2:任务队列长度(workQueue) 3:最大线程数(maximumPoolSize) 4:最大空闲时间(keepAliveTime) 五自定义线程池-实现步骤 1:编写任务类(MyTask),实现Runnable接口; 2:编写线程类(MyWorker),用于执行任务,需要持有所有任务; 3:编写线程池类(MyThreadPool),包含提交任务,执行任务的能力; 4:编写测试类(MyTest),创建线程池对象,提交多个任务测试; 一Java内置线程池原理剖析 我们要想自定义线程池,必须先了解线程池的工作原理,才能自己定义线程池这里我们通过观察java中ThreadPoolExecutor的源码来学习线程池的原理 构造方法: public ThreadPoolExecutor(int corePoolSize, //核心线程数量int maximumPoolSize,// 最大线程数long keepAliveTime, // 最大空闲时间TimeUnit unit, // 时间单位BlockingQueueRunnable workQueue, // 任务队列ThreadFactory threadFactory, // 线程工厂RejectedExecutionHandler handler // 饱和处理机制) { ... }二ThreadPoolExecutor参数详解 我们可以通过下面的场景理解ThreadPoolExecutor中的各个参数; a客户(任务)去银行(线程池)办理业务,但银行刚开始营业,窗口服务员还未就位(相当于线程池中初始线程数量为0), 于是经理(线程池管理者)就安排1号工作人员(创建1号线程执行任务)接待a客户(创建线程); 在a客户业务还没办完时,b客户(任务)又来了,于是经理(线程池管理者)就安排2号工作人员(创建2号线程执行任务)接待b客户(又创建了一个新的线程);假设该银行总共就2个窗口(核心线程数量是2); 紧接着在a,b客户都没有结束的情况下c客户来了,于是经理(线程池管理者)就安排c客户先坐到银行大厅的座位上(空位相当于是任务队列)等候, 并告知他: 如果1、2号工作人员空出,c就可以前去办理业务; 此时d客户又到了银行,(工作人员都在忙,大厅座位也满了)于是经理赶紧安排临时工(新创建的线程)在大堂站着,手持pad设备给d客户办理业务; 假如前面的业务都没有结束的时候e客户又来了,此时正式工作人员都上了,临时工也上了,座位也满了(临时工加正式员工的总数量就是最大线程数), 于是经理只能按《超出银行最大接待能力处理办法》(饱和处理机制)拒接接待e客户; 最后,进来办业务的人少了,大厅的临时工空闲时间也超过了1个小时(最大空闲时间),经理就会让这部分空闲的员工人下班.(销毁线程) 但是为了保证银行银行正常工作(有一个allowCoreThreadTimeout变量控制是否允许销毁核心线程,默认false),即使正式工闲着,也不得提前下班,所以1、2号工作人员继续待着(池内保持核心线程数量); 三线程池工作流程总结示意图 四自定义线程池-参数设计分析 通过观察 Java 中的内置线程池参数讲解和线程池工作流程总结 , 我们不难发现 , 要设计一个好的线程池 , 就必须合理的设置线程池的 4 个参数 ; 那到底该如何合理的设计 4 个参数的值呢 ? 我们一起往下看 . 4 个参数的设计 : 1:核心线程数(corePoolSize) 核心线程数的设计需要依据任务的处理时间和每秒产生的任务数量来确定,例如:执行一个任务需要0.1秒,系统百分之80的时间每秒都会产生100个任务,那么要想在1秒内处理完这100个任务,就需要10个线程,此时我们就可以设计核心线程数为10;当然实际情况不可能这么平均,所以我们一般按照8020原则设计即可,既按照百分之80的情况设计核心线程数,剩下的百分之20可以利用最大线程数处理; 2:任务队列长度(workQueue) 任务队列长度一般设计为:核心线程数/单个任务执行时间*2即可;例如上面的场景中,核心线程数设计为10,单个任务执行时间为0.1秒,则队列长度可以设计为200; 3:最大线程数(maximumPoolSize) 最大线程数的设计除了需要参照核心线程数的条件外,还需要参照系统每秒产生的最大任务数决定:例如:上述环境中,如果系统每秒最大产生的任务是1000个,那么,最大线程数(最大任务数-任务队列长度)*单个任务执行时间;既: 最大线程数(1000-200)*0.180个; 4:最大空闲时间(keepAliveTime) 这个参数的设计完全参考系统运行环境和硬件压力设定,没有固定的参考值,用户可以根据经验和系统产生任务的时间间隔合理设置一个值即可; 上面4个参数的设置只是一般的设计原则,并不是固定的,用户也可以根据实际情况灵活调整! 五自定义线程池-实现步骤 1:编写任务类(MyTask),实现Runnable接口; /*需求:自定义线程池练习,这是任务类,需要实现Runnable;包含任务编号,每一个任务执行时间设计为0.2秒*/ public class MyTask implements Runnable{private int id;//由于run方法是重写接口中的方法,因此id这个属性初始化可以利用构造方法完成public MyTask(int id) {this.id id;}Overridepublic void run() {String name Thread.currentThread().getName();System.out.println(线程:name 即将执行任务:id);try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(线程:name 完成了任务:id);}Overridepublic String toString() {return MyTask{ id id };} } 2:编写线程类(MyWorker),用于执行任务,需要持有所有任务; /*需求:编写一个线程类,需要继承Thread类,设计一个属性,用于保存线程的名字;设计一个集合,用于保存所有的任务;*/ public class MyWorker extends Thread{private String name;//保存线程的名字private ListRunnable tasks;//利用构造方法,给成员变量赋值public MyWorker(String name, ListRunnable tasks) {super(name);this.tasks tasks;}Overridepublic void run() {//判断集合中是否有任务,只要有,就一直执行任务while (tasks.size()0){Runnable r tasks.remove(0);r.run();}} }3:编写线程池类(MyThreadPool),包含提交任务,执行任务的能力; /*这是自定义的线程池类;成员变量:1:任务队列 集合 需要控制线程安全问题2:当前线程数量3:核心线程数量4:最大线程数量5:任务队列的长度成员方法1:提交任务;将任务添加到集合中,需要判断是否超出了任务总长度2:执行任务;判断当前线程的数量,决定创建核心线程还是非核心线程*/ public class MyThreadPool {// 1:任务队列 集合 需要控制线程安全问题private ListRunnable tasks Collections.synchronizedList(new LinkedList());//2:当前线程数量private int num;//3:核心线程数量private int corePoolSize;//4:最大线程数量private int maxSize;//5:任务队列的长度private int workSize;public MyThreadPool(int corePoolSize, int maxSize, int workSize) {this.corePoolSize corePoolSize;this.maxSize maxSize;this.workSize workSize;}//1:提交任务;public void submit(Runnable r){//判断当前集合中任务的数量,是否超出了最大任务数量if(tasks.size()workSize){System.out.println(任务:r被丢弃了...);}else {tasks.add(r);//执行任务execTask(r);}}//2:执行任务;private void execTask(Runnable r) {//判断当前线程池中的线程总数量,是否超出了核心数,if(num corePoolSize){new MyWorker(核心线程:num,tasks).start();num;}else if(num maxSize){new MyWorker(非核心线程:num,tasks).start();num;}else {System.out.println(任务:r 被缓存了...);}}}4:编写测试类(MyTest),创建线程池对象,提交多个任务测试; /*测试类:1: 创建线程池类对象;2: 提交多个任务*/ public class MyTest {public static void main(String[] args) {//1:创建线程池类对象;MyThreadPool pool new MyThreadPool(2,4,20);//2: 提交多个任务for (int i 0; i 30 ; i) {//3:创建任务对象,并提交给线程池MyTask my new MyTask(i);pool.submit(my);}} }
http://www.dnsts.com.cn/news/93671.html

相关文章:

  • 江西建设监督网站郑州企业网站排名优化
  • 网站开发范围说明书wordpress如何搭建一个购物网站
  • 苏州建站公司哪个好手机营销推广方案
  • 武昌区建设局网站网站开发公司哪里寻找客源
  • 做网站公司叫什么一二三类医疗器械目录
  • 建网站的详细案例访问的网页正在升级中
  • php网站商城源码口碑好的赣州网站建设
  • 广州制作网站公司哪家好html网页制作颜色代码
  • 做网站流行的接加工订单的网站
  • 网站建设与维护学什么科目手机网站宽度自适应
  • 做网站视频一般上传到哪里中国十大做网站公司排名
  • 水果网站模板phpcms中的网站介绍页
  • 山东省建设厅继续教育网站谷歌网站流量分析
  • 长沙网站建设网站网络运维工程师工作内容
  • 多个网站集成在一个页面网站建设公司公司
  • 提示网站正在建设中外贸电商网站设计
  • 上海国际建设总承包公司网站广州平面设计培训机构
  • 邮箱网站怎么做产品开发的流程
  • 韩国网站免费观看wordpress如何让导航居中
  • dede织梦仿站网站建设wordpress 媒体库函数
  • 企业网站ui设计欣赏网页制作ppt模板
  • 房产网站系统源码茶叶网页设计模板图片
  • 蓝色商务网站模板苏州吴江做网站公司
  • 设计分享网站wordpress能仿站吗
  • 网站描述更改wordpress uncategorized
  • 国际网站建设经验一个网站有多少网页
  • 网站正在建设维护中页面亚马逊网上购物商城
  • 过年做那些网站致富公众号怎么开通收费功能
  • vps没问题访问不了网站wordpress 生成html代码
  • seo网站内容优化相亲网站如何做