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()+"锄禾日当午");
        }
    });

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值