线程池和Lambda表达式

背景

当要执行新的线程任务时,我们就去创造一个线程,这样使用起来很方便

但存在的问题是,当频繁创建了很多线程,每个线程执行完就销毁了,开销很大,因为创建和销毁线程需要时间

使用一种方法线程池,使线程得以复用:线程执行完任务后,不销毁,可以继续执行下一个任务。

线程池

线程池中存放多个新建的线程,需要执行线程任务时,就往线程池中添加线程任务。

如果加入的线程任务数目超过线程池并发的线程数时,剩余的线程任务会先进入等待队列,直到线程池有线程空闲,再来执行这些剩余的任务。

 

使用

  1. 使用线程池的工厂类Executors的静态方法newFixedThreadPool(int nthread) 设置一个指定线程数的线程池,会返回一个ExecutorService线程池接口
  2. 使用Runnable 创建需要的线程任务1、2、3。。。。。
  3. 调用ExecutorService对象的submit(Runnable a)方法,往线程池中添加线程任务,线程任务便开始执行。 

RejectedExecutorException出现的原因:一种是新加入线程时,线程池已经被销毁了

                                                                  一种是线程数量已经超过线程池的最大容量

 

函数式编程思想:

只关注结果,不管是谁去做的,怎么做的,不重视过程

面向对象编程思想:

做一个事情,找一个对象,调用这个对象的方法,去解决事情

 

Lambda表达式

使用函数编程的思想,简化冗余的代码

使用前提

  • 接口中有且只有一个抽象方法
  • Lambda必须具有上下文判断(可推断即可省略),方法的参数或局部变量的类型必须为Lambda对应的接口类型,才能使用Lambda作为该接口的实例。

有且只有一个抽象方法的接口叫做“函数式接口”

标准格式

包含三部分: 参数、箭头、代码    ( 参数列表 ) -> { 重写方法的代码 }

//除了有效语句,其它的冗余可以删除
new Thread(new Runnable(){  
    public void run(){  
        有效语句.......
    }
}).start();

//标准格式
new Thread(() -> {  
        有效语句.......
    }
}).start();

 

省略格式

  1. 参数列表中参数的数据类型可以省略
  2. 参数列表中如果只有一个参数,甚至括号也可以不写
  3. 有效内容如果只有一句话,那么其大括号、返回值、分号都可以省略,并且要么一起省略,要么三个都不要省略

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值