<dl id="opymh"></dl>

<div id="opymh"></div>
      <div id="opymh"><tr id="opymh"></tr></div>

        <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

        <em id="opymh"></em>

        <em id="opymh"><ol id="opymh"></ol></em>

              频道栏目
              首页 > 程序开发 > 软件开发 > Java > 正文
              Java架构学习之线程池使用讲解
              2018-07-27 13:52:19         来源£ºLeeue李月  
              收藏   我要投稿

              一¡¢线程池

              1¡¢什么是线程池£¿
              答£º
                  经常创建¡¢启动销毁一个线程都是非常消耗时间的¡£
                  使用线程池进行管理和复用线程£¬提高程序效率¡£
              
              面试答£º
              Java线程池能带来的3个?#20040;¦£?
               1¡¢降低资源消耗¡£通过重复利用已创建的线程降低线程创建和销毁造成的消耗¡£
               2¡¢提高响应速度¡£当任务到达时£¬任务可以不需要等到线程创建就能立即执行¡£
               3¡¢提高线程的可管理性¡£线程是稀缺资源£¬如果无限?#39057;?#21019;建£¬
               不仅会消耗系统资源¡£还会降低系统的稳定性¡£
               使用线程池可以统一分配¡¢调优和监控£¬但是要合理利用¡£
              
              Java使用线程核心走的是ThreadPoolExecutor¡£(构造函数)
              

              二¡¢使用线程池的方式

              使用线程池的方式£º
              使用Executor 封装好的四种线程池类型¡£
              1¡¢newCachodThreadPool创建一个可以缓存线程池£¬如果线程池长度超过处理需要
              £¬可灵活回收空闲线程£¬若无可回收£¬则新建线程¡£
              2¡¢newFixedThreadPool 创建一个定长的线程池¡£可控制线程最大并发数£¬超出的
              线程会在队列中等待¡£
              3¡¢newFixedThreadPool 创建一个定长的线程池¡£
              4¡¢newSingleThreadExecutor 创建一个单线程化的线程池£¬它只会用唯一的工作
              线程来执行任务¡£
              

              三¡¢线程池合理配置

              CPU密集¡¢IO密集¡£
              

              四¡¢4种创建线程池的方式

              newCachedThreadPool 创建可以缓存的线程池

              代码£º

              package com.leeue;
              import java.util.concurrent.ExecutorService;
              import java.util.concurrent.Executors;
              
              /**
               * @classDesc: 功能描述:(线程池四种创建方式 newCachedThreadPool 创建可缓存的线程池)
               * @author:
               * @Version:v1.0
               * @createTime:2018年7月24日 下午2:56:16
               */
              public class NewCachedThreadPoolDemo {
                  public static void main(String[] args) {
                      // 1¡¢创建可缓存的线程池 可以重复的利用
                      ExecutorService newCachedThreadPool = Executors.newCachedThreadPool();
                      for (int i = 0; i < 10; i++) {
                          int temp = i;
                          newCachedThreadPool.execute(new Runnable() {
                              @Override
                              public void run() {
                                  System.out.println("ThreadName:" + Thread.currentThread().getName() + " i:" + temp);
                              }
                          });
                      }
                  }
              }
              显示结果£º本来程序是创建10个线程£¬这里就创建了7个£¬说明有3个在复用
              

              这里写图片描述

              newFixedThreadPool:创建固定长度的线程池

              代码£º
              
              package com.leeue;
              
              import java.util.concurrent.ExecutorService;
              import java.util.concurrent.Executors;
              
              /**
               * 
               * @classDesc: 功能描述:(可固定长度的线程池  newFixedThreadPool)
               * @author:李月
               * @Version:v1.0
               * @createTime:2018年7月24日 下午3:23:49
               */
              public class newFixedThreadPoolDemo {
                  public static void main(String[] args) {
                      //快捷键 ctrl+2 +F ?#21019;?#24314;变量名
                      ExecutorService newFixedThreadPool = Executors.newFixedThreadPool(3);
                      for(int i = 0; i < 10; i++) {
                          int temp = i;
                          newFixedThreadPool.execute(new Runnable() {
              
                              @Override
                              public void run() {
                              System.out.println("ThreadName:"+Thread.currentThread().getName()+" i:"+temp);  
                              }
                          });
                      }
              
                  }
              }
              显示效果£º
              

              这里写图片描述

              newScheduledThreadPool£º创建可以定时执行的线程池

              代码执行£º
              
              package com.leeue;
              
              import java.util.concurrent.Executors;
              import java.util.concurrent.ScheduledExecutorService;
              import java.util.concurrent.TimeUnit;
              
              /**
               * 
               * @classDesc: 功能描述:(创建 可定时的线程池)
               * @author:
               * @Version:v1.0
               * @createTime:2018年7月24日 下午3:40:54
               */
              public class NewScheduledThreadPoolDemo {
                  public static void main(String[] args) {
                      ScheduledExecutorService newScheduledThreadPool = Executors.newScheduledThreadPool(3);
                      for(int i = 0; i < 10; i++) {
                          int temp = i;
                          newScheduledThreadPool.schedule(new Runnable() {
              
                              @Override
                              public void run() {
                                  System.out.println("ThreadName:"+Thread.currentThread().getName()+" i:"+temp);  
              
                              }
                          }, 3, TimeUnit.SECONDS);//定时3秒后 执行这个线程池
                      }
                  }
              }
              
              显示效果£º
              

              这里写图片描述

              newSingleThreadExecutor£º单线程池

              代码£º
              
              package com.leeue;
              
              import java.util.concurrent.ExecutorService;
              import java.util.concurrent.Executors;
              
              /**
               * 
               * @classDesc: 功能描述:(单线程的线程池)
               * @author:
               * @Version:v1.0
               * @createTime:2018年7月24日 下午3:57:15
               */
              public class NewSingleThreadScheduledDemo {
                  public static void main(String[] args) {
                      ExecutorService newSingleThreadExecutor = Executors.newSingleThreadExecutor();
                      for (int i = 0; i < 10; i++) {
                          int temp = i;
                          newSingleThreadExecutor.execute(new Runnable() {
              
                              @Override
                              public void run() {
                                  System.out.println("ThreadName:" + Thread.currentThread().getName() + " i:" + temp);
                              }
                          });
                      }
                  }
              }
              
              显示效果
              

              这里写图片描述

              停掉线程池的方法newSingleThreadExecutor.shutdown();//停掉线程池的方法

              调用shoutdown()方法¡£
              

              五¡¢线程池原理分析

              面试的时候主要谈£º核心线程池¡¢最大线程数¡£
              
              点击复制链接 与好友分享!回本站首页
              上一篇£ºjava.lang.NoSuchMethodError: org.springframework.core.annotation.AnnotatedElementUtils.findMergedAnn报错解决办法
              下一篇£ºJava架构学习之jason¡¢fastjson解析¡¢xml使用¡¢dom4j解析¡¢java反射机制及?#20013;´SpringIOC框架?#36947;?#35762;解
              相关文章
              图文推荐
              点击排行

              关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报?#34892;?/a>

              版权所有: 红黑联盟--致力于做实用的IT技术学习网站

              ¼«ËÙ·ÉͧºÃ¼Ù
              <dl id="opymh"></dl>

              <div id="opymh"></div>
                  <div id="opymh"><tr id="opymh"></tr></div>

                    <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

                    <em id="opymh"></em>

                    <em id="opymh"><ol id="opymh"></ol></em>

                          <dl id="opymh"></dl>

                          <div id="opymh"></div>
                              <div id="opymh"><tr id="opymh"></tr></div>

                                <em id="opymh"><ins id="opymh"><mark id="opymh"></mark></ins></em><sup id="opymh"><menu id="opymh"></menu></sup>

                                <em id="opymh"></em>

                                <em id="opymh"><ol id="opymh"></ol></em>