java 缓存线程池基础讲解

一、线程和进程的简要描述

进程:   是指一个内存中运行的应用程序,每个进程都有一个独立的内存空间 。


线程: 是进程中的一个执行路径,共享一个内存空间,线程之间可以自由切换,并发执行. 一个进程最少有一个线程 ;  线程实际上是在进程基础之上的进一步划分,一个进程启动之后,里面的若干执行路径又可以划分 成若干个线。

注:

进程包含线程,一个进程可能包含一个或者多个线程;一个进程里面的缓存,再这个进程里面的线程可以共享使用。

二、线程缓存池

三种: 长度无限制,长度限制 和 单线程池

2.1、长度无限制
 创建步骤,任务加入后的执行流程:
 *         2.1.1、判断线程池是否在一个空闲线程
 *         2.1.2、存在则使用
 *         2.1. 3、不存在,则创建线程,并放入线程池,然后使用

例: 

// 同时运行三个线程,第四个等待1秒后运行,会用到空闲的线程执行。通过线程名称查看

public class CacheThreadPool {

    public static void main(String[] args) {

        ExecutorService service = Executors.newCachedThreadPool();//创建缓存的线程的池
        //只会现场池执行新的任务
        service.execute(new Runnable() {
            @Override
            public void run() {
            System.out.println(Thread.currentThread().getName()+"锄禾日当午");
            }
        });
        service.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"锄禾日当午");
            }
        });
        service.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"锄禾日当午");
            }
        });

        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }


        service.execute(new Runnable() {//使用了缓存的线程池执行,线程的重复使用
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"锄禾日当午");
            }
        });

    }


}

------------------------------------------------------------

2.2、定长线程池(长度是只读的数值)

* 创建步骤,任务加入后的执行流程 :

*        2.2. 1.判断线程池是否存在空闲

*         2.存在则使用

*         3.不存在空闲线程,且线程池未满的情况下,则创建线程,并放入线程池,然后使用

*        4.不存在空闲线程,且线程池已满的情况下,则等待线程池存在空闲线程 

//创建 两个线程,第三个执行的时候,获取到的线程名称是 ,空闲下来的线程名称。

  public static void main(String[] args) {
        ExecutorService service = Executors.newFixedThreadPool(2);//创建两个线程池不允许扩容
        service.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"锄禾日当午1");
                try {
                    Thread.sleep(3000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        });

        service.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"锄禾日当午2");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }

            }
        });

        service.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println(Thread.currentThread().getName()+"锄禾日当午3"); 
            }
        }); 
    }

-------------------------------

2.3 单线程池

*        执行流程

*         2.3. 1、判断线程池 的那个线程池 是否空闲

*         2.3. 2、空闲则使用

*         2.3. 3、不空闲则等待池中的单个线程池空闲 

//创建单线成池,通过线程名字查看

public static void main(String[] args) {
    ExecutorService service = Executors.newSingleThreadExecutor();

    service.execute(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"锄禾日当午");
        }
    });

    service.execute(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"锄禾日当午");
        }
    });

    service.execute(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"锄禾日当午");
        }
    });

    service.execute(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"锄禾日当午");
        }
    });

    service.execute(new Runnable() {
        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName()+"锄禾日当午");
        }
    });

}


版权声明:本文为weixin_35985017原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。