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

凯里网站开发gzklyywordpress网站统计插件下载

凯里网站开发gzklyy,wordpress网站统计插件下载,绵阳建设工程信息网官网,新出的网络游戏排行榜线程池的作用主要是为了提升系统的性能以及使用率。文章刚开始就提到#xff0c;如果我们使用最简单的方式创建线程#xff0c;如果用户量比较大#xff0c;那么就会产生很多创建和销毁线程的动作#xff0c;这会导致服务器在创建和销毁线程上消耗的性能可能要比处理实际业…线程池的作用主要是为了提升系统的性能以及使用率。文章刚开始就提到如果我们使用最简单的方式创建线程如果用户量比较大那么就会产生很多创建和销毁线程的动作这会导致服务器在创建和销毁线程上消耗的性能可能要比处理实际业务花费的时间和性能更多。 作者小涛 一、如下方式存在的问题 new Thread() { Override public void run() { // 业务逻辑 } }.start(); 1、首先频繁的创建、销毁对象是一个很消耗性能的事情;2、如果用户量比较大导致占用过多的资源可能会导致我们的服务由于资源不足而宕机;3、综上所述在实际的开发中这种操作其实是不可取的一种方式。 二、使用线程池有什么优点 1、线程池中线程的使用率提升减少对象的创建、销毁;2、线程池可以控制线程数有效的提升服务器的使用资源避免由于资源不足而发生宕机等问题; 三、线程池的四种使用方式 1、newCachedThreadPool 创建一个线程池如果线程池中的线程数量过大它可以有效的回收多余的线程如果线程数不足那么它可以创建新的线程。 public static void method() throws Exception { ExecutorService executor Executors.newCachedThreadPool(); for (int i 0; i 5; i) { final int index i; Thread.sleep(1000); executor.execute(new Runnable() { Override public void run() { System.out.println(Thread.currentThread().getName() index); } }); } } 执行结果 可以明显的看出现在就需要几条线程来交替执行。 不足这种方式虽然可以根据业务场景自动的扩展线程数来处理我们的业务但是最多需要多少个线程同时处理缺是我们无法控制的; 优点如果当第二个任务开始第一个任务已经执行结束那么第二个任务会复用第一个任务创建的线程并不会重新创建新的线程提高了线程的复用率; 2、newFixedThreadPool 这种方式可以指定线程池中的线程数。举个栗子如果一间澡堂子最大只能容纳20个人同时洗澡那么后面来的人只能在外面排队等待。如果硬往里冲那么只会出现一种情景摩擦摩擦... 首先测试一下最大容量为一个线程那么会不会是我们预测的结果。 public static void method_01() throws InterruptedException { ExecutorService executor Executors.newFixedThreadPool(1); for (int i 0; i 10; i) { Thread.sleep(1000); final int index i; executor.execute(() - { try { Thread.sleep(2 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() index); }); } executor.shutdown(); } 优点两个结果综合说明newFixedThreadPool的线程数是可以进行控制的因此我们可以通过控制最大线程来使我们的服务器打到最大的使用率同事又可以保证及时流量突然增大也不会占用服务器过多的资源。 3、newScheduledThreadPool 该线程池支持定时以及周期性的任务执行我们可以延迟任务的执行时间也可以设置一个周期性的时间让任务重复执行。 该线程池中有以下两种延迟的方法。 scheduleAtFixedRate 测试一 public static void method_02() { ScheduledExecutorService executor Executors.newScheduledThreadPool(5); executor.scheduleAtFixedRate(new Runnable() { Override public void run() { long start new Date().getTime(); System.out.println(scheduleAtFixedRate 开始执行时间: DateFormat.getTimeInstance().format(new Date())); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } long end new Date().getTime(); System.out.println(scheduleAtFixedRate 执行花费时间 (end - start) / 1000 m); System.out.println(scheduleAtFixedRate 执行完成时间 DateFormat.getTimeInstance().format(new Date())); System.out.println(); } }, 1, 5, TimeUnit.SECONDS); } 总结以上两种方式不同的地方是任务的执行时间如果间隔时间大于任务的执行时间任务不受执行时间的影响。如果间隔时间小于任务的执行时间那么任务执行结束之后会立马执行至此间隔时间就会被打乱。 scheduleWithFixedDelay 测试一 public static void method_03() { ScheduledExecutorService executor Executors.newScheduledThreadPool(2); executor.scheduleWithFixedDelay(new Runnable() { Override public void run() { long start new Date().getTime(); System.out.println(scheduleWithFixedDelay 开始执行时间: DateFormat.getTimeInstance().format(new Date())); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } long end new Date().getTime(); System.out.println(scheduleWithFixedDelay执行花费时间 (end - start) / 1000 m); System.out.println(scheduleWithFixedDelay执行完成时间 DateFormat.getTimeInstance().format(new Date())); System.out.println(); } }, 1, 2, TimeUnit.SECONDS); } 测试二 public static void method_03() { ScheduledExecutorService executor Executors.newScheduledThreadPool(2); executor.scheduleWithFixedDelay(new Runnable() { Override public void run() { long start new Date().getTime(); System.out.println(scheduleWithFixedDelay 开始执行时间: DateFormat.getTimeInstance().format(new Date())); try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } long end new Date().getTime(); System.out.println(scheduleWithFixedDelay执行花费时间 (end - start) / 1000 m); System.out.println(scheduleWithFixedDelay执行完成时间 DateFormat.getTimeInstance().format(new Date())); System.out.println(); } }, 1, 2, TimeUnit.SECONDS); } 总结同样的跟scheduleWithFixedDelay测试方法一样可以测出scheduleWithFixedDelay的间隔时间不会受任务执行时间长短的影响。 4、newSingleThreadExecutor 这是一个单线程池至始至终都由一个线程来执行。 public static void method_04() { ExecutorService executor Executors.newSingleThreadExecutor(); for (int i 0; i 5; i) { final int index i; executor.execute(() - { try { Thread.sleep(2 * 1000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println(Thread.currentThread().getName() index); }); } executor.shutdown(); } 四、线程池的作用 线程池的作用主要是为了提升系统的性能以及使用率。文章刚开始就提到如果我们使用最简单的方式创建线程如果用户量比较大那么就会产生很多创建和销毁线程的动作这会导致服务器在创建和销毁线程上消耗的性能可能要比处理实际业务花费的时间和性能更多。线程池就是为了解决这种这种问题而出现的。 同样思想的设计还有很多比如数据库连接池由于频繁的连接数据库然而创建连接是一个很消耗性能的事情所有数据库连接池就出现了。 阅读目录置顶)(长期更新计算机领域知识 阅读目录置顶)(长期更新计算机领域知识 阅读目录置顶)(长期科技领域知识 歌谣带你看java面试题
http://www.sadfv.cn/news/360616/

相关文章:

  • 移动端网站怎么做的佛山网站建设网站制作公司哪家好
  • 国内网站建设郑州app软件公司
  • 个人网站的名称深圳网站建设找哪家
  • 制作网站注册登录模块的思维导图抖音推广引流
  • 商城类网站建设 数据库大兴区企业网站建设
  • 站长工具综合查询站长工具百度推广售后
  • 网站如何做定级备案新东方英语线下培训学校
  • 深圳.网站建设网站访问不了的原因
  • 网站开发 实训 报告企业logo设计创意
  • 搭建网站用什么系统网站底部版权信息
  • 临沂网站优化公司wordpress个人博客模版
  • 福田专业网站建设公司哪家好游戏小程序开发定制
  • 免费搭建企业网站彭州做网站的公司
  • 双语版网站案例免费建立个人网站申请
  • 网站建设数据库代码网站建设有哪些分类
  • 今标 网站建设网站主机选择
  • wordpress 注册 登陆长沙百度快速排名优化
  • 怎么跟客户介绍网站建设中企动力潍坊分公司
  • 怎么修改php网站云主机购买
  • 网站商城建设方案网站后台数据
  • 电子商务网站建设技巧制作游戏的网站
  • 网站建设软件定制开发网站建设引擎
  • 公司网站域名备案流程社交网站盈利吗
  • 企业网站管理制度建设浪花直播
  • 外贸专业网站建设sanitize_user wordpress
  • 做亚马逊网站一般发什么快递公司wordpress轮翻图参数
  • 如何去掉链接wordpress想做个卷帘门百度优化网站
  • 无锡设计网站找哪家时尚网站建设
  • 做广告牌子的电话安徽seo推广公司
  • 怎么做车载mp3下载网站合肥网站优化价格