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

深圳 网站开发公司电话网站关键词快排名

深圳 网站开发公司电话,网站关键词快排名,网站建设可行性及需求分析,网站设计公司网站目录 一.什么是线程池 二.线程池的实现原理 #x1f388;为什么要有工厂模式#xff1f; 三.线程池的构造方法解读 #x1f388;线程池的拒绝策略 四.自己实现一个线程池 一.什么是线程池 简单来说#xff0c;线程池就好比一块鱼塘#xff0c;鱼塘中的每条鱼就是一个线程… 目录 一.什么是线程池 二.线程池的实现原理 为什么要有工厂模式 三.线程池的构造方法解读 线程池的拒绝策略 四.自己实现一个线程池 一.什么是线程池 简单来说线程池就好比一块鱼塘鱼塘中的每条鱼就是一个线程。那么为什么要有这个线程池呢就好比 一个“渣女\渣男”当他和A在一起的时候如果想和B在一起那么就需要先想办法和A分手再和B搞好关系最终和B在一起。如果她和A谈的时候已经找好了B C D此时就可以直接拿来无缝衔接~~ 其实线程池也就大概这个作用里面存放一些线程需要用的时候直接拿来使用。 二.线程池的实现原理 我们先来看线程池是如何创建的 package Pool;import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;public class threadPoolDemo {public static void main(String[] args) {ExecutorService executor Executors.newSingleThreadExecutor();} } 很明显此处的线程池竟然不是 new 出来的那么它是如何被实例化的呢其实这里就使用了一种设计模式工厂模式。 为什么要有工厂模式 其实工厂模式就时给Java中的构造方法填坑的我们的构造方法其实时有很大缺陷的我们来看以下例子。 我们期望这个Point类初始化的时候能够传入 double xdouble y用来构造笛卡尔坐标系 我们又希望在不创建其他类的情况下这个Point类 初始化的时候能够传入 double rdouble a用来构造极坐标系。 但是构造方法也是方法此时的方法由于参数个数和参数的类型都相同就会编译失败那么就没办法满足期望 此时我们可以再写一个类 此时这个类中又两个静态方法一个是构造笛卡尔坐标系并且返回。一个是构造及坐标系并且返回对象。 那么我们就可以使用以下语句来分别调用 Point p1 PointFactory.makePintByXY(10,20)  Point p2  PointFactory.makePintByRA(12,63)  此时通过PointFactory类来给Point类传入需要的值就可以了。 那么线程池也是通过这样的方式来进行创建的 三.线程池的构造方法解读 从Excutor这个工厂类的源码中可以得到以下 其实线程的创建又被封装到了一个叫做ThreadPoolExecutor的类中 点开ThreadPoolExecutor可以得到如下图片 其中的每个参数的意思是这样的 第一个是核心线程数 第二个是最大线程数 线程池中的线程数目是可以动态变化的 范围就是【int corPoolSize. ~ int maxmumPoolSize】 什么是核心线程 就好比一个公司中有正式员工核心线程和实习生总的员工数目不能超过一定的值。当人手不够用就招实习生这样既可以满足效率的需求又可以避免过多的开销。 第三个是线程的可存活时间 第四个TimeUnit unit是用来设置非核心线程闲置超时时长keepAliveTime的单位。当一个非核心线程的闲置时间超过这个参数所设定的时长时该线程就会被销毁掉。 第五个比较重要 第六个是线程池的拒绝策略也就是当所有线程都处于忙碌状态如果还往线程池中添加元素线程池所做的操作。 这些构造方法第一个和第五个以及第六个是需要重点掌握的。  下面来单独讲讲第六个参数拒绝策略 线程池的拒绝策略 所谓的拒绝策略其实就是如果线程池中每个线程都是处于忙碌的状态如何应对新来的线程任务。 举个例子如果我周一到周五都是满课此时我一朋友让我给他去代课那么此时我如何应对此时就会有相应的应对策略 AbortPolicy默认策略这是默认的拒绝策略它会抛出一个未检查的RejectedExecutionException以指示任务被拒绝。也就是我本来都满课了朋友还让我去代课此时我就直接崩溃代课和我自己的课我都不去上了直接崩溃CallerRunsPolicy这个策略不会抛出异常。相反它会将任务退回给调用线程让它自己运行这个任务。 也就是让我朋友自己去上课。DiscardOldestPolicy此策略会丢弃队列中等待最久的任务并立即返回给调用者。也就是我丢弃我课程中一节课去给他代课。DiscardPolicy这个策略会静默地丢弃被拒绝的任务。也就是说它不会抛出任何异常也不会通知任务被拒绝。 也就是我拒绝去给他代课我自己上自己的课。然后我朋友也不去上课了那么这个课任务) 也就黄了。 四.自己实现一个线程池 实现线程池一个最关键的步骤就是拒绝策略那么说明拒绝策略呢 由于之前学过阻塞队列的知识这里就先用阻塞队列来实现以下。 那么这个就是一种自己定义的新的拒绝策略那就是一直等待~ package Pool;import java.util.concurrent.ArrayBlockingQueue; import java.util.concurrent.BlockingQueue;class MyPoolDemo {//一个队列BlockingQueueRunnable queue new ArrayBlockingQueue(1000);//通过这个方法,把任务添加到队列当中public void submit(Runnable task) throws InterruptedException {queue.put(task); //往阻塞队列中放入元素}public MyPoolDemo(int n) throws InterruptedException {//构造方法for (int i 0; i n; i) {Thread t new Thread(() - {//让这个线程从队列中消费任务并且进行执行try {//如果队列中没有元素,那就阻塞等待//一旦队列中有了任务,那么就立即执行take方法获取到任务并且开始执行Runnable task task queue.take();task.run();} catch (InterruptedException e) {throw new RuntimeException(e);}});t.start();}}} public class RunDemo {public static void main(String[] args) throws InterruptedException {/*** 步骤理解:* 1.创建线程池并且指定线程数目是 20 ,在实例化线程池的时候已经创建好了20个线程* 2.这20个线程都在等待 take 获取到任务队列中的任务* 3.for 语句 循环 1000次,每次循环都会提交任务到任务队列* 4.一但任务队列里面有元素,这20个线程就会立马获取到,并且执行*/MyPoolDemo myPoolDemo new MyPoolDemo(20);int taskCount 1000;while (true) {for (int i 0; i taskCount; i) {int id i;myPoolDemo.submit(new Runnable() {Overridepublic void run() {System.out.println(执行任务: id);}});}}}}运行结果 代码解读 1.线程池里的线程是需要执行任务的这个任务可以放到    BlockingQueue 这个阻塞队列中。为什么要使用阻塞队列呢当线程池中的线程都在工作此时就直接等待阻塞。 2.submit 方法接受一个实例化好的Runnable类型的任务负责往队列中添加元素 3. MyPoolDemo(int n) 是这个类的构造放法当实例化这个类的时候被指定的 n 就是要创建的线程数量。 4. 由运行结果可以得出当线程数量为20的时候可以看到任务被随即执行完了。 总结Java线程池是Java并发编程中一个重要的概念它用于管理和控制线程的创建、销毁以及任务提交和执行。线程池的主要目的是减少创建和销毁线程的开销提高性能。
http://www.w-s-a.com/news/422051/

相关文章:

  • 网站建设的工作总结seo同行网站
  • 网站需要兼容哪些浏览器sql数据库做的网站怎么发布
  • 营销型网站的建站步骤是什么意思广州门户网站建设公司
  • 汕尾好网站建设推广计算机软件包含网站开发
  • 建设工程施工许可证在哪个网站办wordpress更换主题白屏
  • 微交易网站建设wordpress摘要调用
  • 做网站维护需要懂什么网站后台后缀名
  • 网站建设的认可桂平市住房和城乡建设局网站
  • 网站设计师岗位职责域名关键词查询
  • 百度怎样建设网站盐城公司网站建设
  • 站长工具国产2023网站制作 商务
  • 网络新闻专题做的最好的网站杭州网站设计建设公司
  • 电商网站界面设计流程ps培训班一般学费多少钱
  • 西安网站运营上海闵行区网站制作公司
  • 宁波网站推广代运营长链接转化成短链接工具
  • 小企业如何建网站怎么自己制作app
  • 苏州品牌网站制作公司宁波建设工程有限公司
  • 合肥网站建设zgkr互联网创业好项目
  • 哪里学网站建设与管理云落wordpress
  • 网站建设意见做网站涉及到哪些
  • 网站导航栏原型图怎么做怎么样创建一个网站
  • 遨游建站金融网站建站
  • cms企业网站模板上海网站开发平台
  • 贵阳网站建设搜q479185700网站团队建设
  • 电商网站建设 教学总结蚌埠市住房建设部网站
  • 深圳罗湖企业网站发稿类别是什么
  • 做网站基本语言企业应用软件开发
  • 网站建设与运营 市场分析影视小程序搭建
  • vs 团队网站开发中铁建设门户网登录咋进不去了
  • 快速网站建设公司哪家好优秀的网站建设