• Java多线程之线程池


     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    /*
    *作者:呆萌老师
    *☑csdn认证讲师
    *☑51cto高级讲师
    *☑腾讯课堂认证讲师
    *☑网易云课堂认证讲师
    *☑华为开发者学堂认证讲师
    *☑爱奇艺千人名师计划成员
    *在这里给大家分享技术、知识和生活
    *各种干货,记得关注哦!
    *vx:it_daimeng
    */

      

    1、什么是线程池

            在java中,如果每个请求到达就创建一个新线程,开销是相当大的。在实际使用中,创建和销毁线程花费的时间和消耗的系统资源都相当大,甚至可能要比在处理实际的用户请求的时间和资源要多的多。除了创建和销毁线程的开销之外,活动的线程也需要消耗系统资源。如果在一个jvm里创建太多的线程,可能会使系统由于过度消耗内存或“切换过度”而导致系统资源不足。为了防止资源不足,需要采取一些办法来限制任何给定时刻处理的请求数目,尽可能减少创建和销毁线程的次数,特别是一些资源耗费比较大的线程的创建和销毁,尽量利用已有对象来进行服务。

    线程池主要用来解决线程生命周期开销问题和资源不足问题。通过对多个任务重复使用线程,线程创建的开销就被分摊到了多个任务上了,而且由于在请求到达时线程已经存在,所以消除了线程创建所带来的延迟。这样,就可以立即为请求服务,使用应用程序响应更快。另外,通过适当的调整线程中的线程数目可以防止出现资源不足的情况。

     

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class Thread1 implements Runnable {
     
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"在执行任务");
            // TODO Auto-generated method stub
            for(int i=1;i<=100;i++)
                System.out.println("a..."+i);
             
        }
         
         
     
    }

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Thread2 implements Runnable {
         
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"在执行任务");
            // TODO Auto-generated method stub
            for(int i=1;i<=100;i++)
                System.out.println("b..."+i);
             
        }
     
    }

      

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public class Thread3 implements Runnable {
         
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"在执行任务");
            // TODO Auto-generated method stub
            for(int i=1;i<=100;i++)
                System.out.println("c..."+i);
             
        }
     
    }

      

    从线程池中取出线程对象执行任务,任务执行完毕 ,会返回到线程池中. 

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    public class Test {
     
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
         
            //1.创建线程池
            ExecutorService pool=  Executors.newFixedThreadPool(2);
             
            //2.给线程池分配任务
            pool.submit(new Thread1());
             
            pool.submit(new Thread2());
             
            pool.submit(new Thread3());
             
            pool.shutdown(); //销毁线程池 一般不用销毁
             
             
        }
     
    }
      
     

      

  • 相关阅读:
    06条件判断
    Android---GC回收机制与分代回收策略
    什么是 Otherdeed for Otherside NFT 系列?
    数字孪生平台可视化常用三维建模方式和精细度分级
    Spring-06 Xml和注解方式配置Aop
    制造企业如何通过APS智能排产改善“低利润”局面?
    转载)word输出高分辨PDF并且有链接跳转功能
    浏览器窗口间的通信
    简单使用_matlab生成数据帧
    HTML+CSS简单的网页制作期末作业——浙江旅游景点介绍网页制作
  • 原文地址:https://www.cnblogs.com/daimenglaoshi/p/16535701.html