cordova dart mysqli module cron bitmap request Movejs vue教程入门 ai视频教程下载 access教学视频 mysql删除一列 pip环境变量配置 matlab网页版 mysql分区表优劣分析 java高级特性 kubernetes安装 kubernetes集群 python for循环 python面向对象 python平方函数 python日期转时间戳 java案例 java中继承 java字符串反转 java编译环境 java函数式接口 java的数据结构 java时间类 java获取url java输出 linux命令 linux远程 战地女记者 修改mac地址软件 din字体 隐藏进程 2k14生涯模式修改器 美国地址生成器 黑市商人
当前位置: 首页 > 学习教程  > 编程语言

线程池_java8特性(抽象非抽象)_lambda_函数式接口

2020/12/28 20:18:26 文章标签:

2020-12-28 线程池 没有线程池的情况:手动创建线程对象,如果线程都是执行一些简单的任务,这个任务需要有多个线程来完成。需要自己创建多个线程,创建多个线程的过程效率太低,时间都花费在创建和销毁上面 有线程池的情…

2020-12-28


线程池

没有线程池的情况:手动创建线程对象,如果线程都是执行一些简单的任务,这个任务需要有多个线程来完成。需要自己创建多个线程,创建多个线程的过程效率太低,时间都花费在创建和销毁上面

有线程池的情况:不需要手动创建线程对象,线程池中维护了一些活跃的线程;线程的创建和销毁都是线程池来完成。活跃的线程随时可以使用线程池中的线程来执行任务

线程池的创建

Java.util.concurrent 这个包下面有一个创建线程池的工具类

在包中的一些类型都是用于创建线程池的类型:

ExecutorService、ThreadFactory

其中我们关注ExecutorService 执行器服务

这个类型可以作为一个创建线程池方法的返回接口类型。

创建线程池的方法:

1、newFixedThreadPool(int nThreads)创建一个指定数量线程的线程池

2、newSingleThreadExecutor()创建只有一个线程的线程池

返回值是一个ExecutorService接口,不用关注实现类直接使用接口中的方法就可以了。

操作线程池的方法:

submit()提交任务的方法,里面要new一个Runnable接口

shutdown()关闭线程池:在关闭之前提交的任务,一定会帮你完成;在结束之后提交的任务就不再执行

shutdownNow()关闭线程池:在关闭之前如果还有任务没有执行,就不在执行了直接关闭线程池,将没有完成的任务作为返回值封装在一个list集合中

线程池的注意事项:

1、可以执行大于线程数量的任务,没有被分配到线程的任务,排队等待线程的空余,然后执行剩余的任务

2、线程池不会自己结束,没结束之前线程池的线程都是活跃状态,随时等待继续提交任务

3、安全性:在线程池中如果有线程挂掉,线程池总能保证线程的数量

4、效率方面线程池维护的线程都是活跃的可以直接拿来用,线程池中的操作效率优于手动创建

java8接口的特性

1、jdk7里面的接口只能有抽象方法,不能存在非抽象的方法,必须要用abstract修饰方法

2、jdk8接口中的方法可以是抽象的也可以是非抽象,如果更新平台,不会要求一定重写里面的所有方法。非抽象方法必须要用default和static修饰,方法必须要有方法体,可以不用重写。

default关键字

机制:在接口中方法声明上加上default关键字,这个方法就可以不被重写,必须有自己的方法实现。

使用:实现一个接口,这个接口中有抽象方法也有非抽象方法

在使用时的特殊情况:

1、在两个接口中有相同的抽象方法,必须重写抽象方法

2、两个接口中都有相同的非抽象方法。一个实现类实现这两个接口,一定要求重写其中一个中的方法

3、如果要选择一个默认的实现方式,在实现的接口中选择一个来继承,接口名.super.方法名()

4、一个实现类实现一个接口又继承了一个父类,那么接口和父类中有着相同的非抽象方法。即使是一个抽象类,优先考虑继承的是父类

接口:扩展

父类:核心

抽象方法需重写,非抽象方法不需要重写

影响:

1、接口的功能更加完善;

2、接口更加的向抽象类靠拢,实际上是强化了接口削弱了抽象类

Static

含义:可以在接口中使用static关键字定义静态方法,可以有自己的方法实现。

使用:直接用接口名调用方法即可。

注意事项:

1、static和abstract不能一起使用

原因:静态方法可以不用实现类对象调用直接使用接口调用;抽象方法需要对象来调用。静态方法如果没有实现,那么就会造成在运行阶段的安全隐患

2、static修饰的方法不能使用实现类的对象调用

原因:如果可以调用那么一个实现类可以实现多个接口,不能确定要调用哪个接口中的方法,会造成安全隐患。

lambda表达式

本质:就是用特殊的形式表示一个对象,一个实现类的对象

前提:

1、必须要实现一个接口

2、这个接口一定是一个函数式接口(只有一个抽象方法的接口)

好处:

1、对于开发者而言可以提升开发效率

2、更加能够将核心的功能突出,阅读效率也提高了

lambda格式的详细介绍

格式:

()->{};

():在实现类中重写方法的参数列表:不用去关注参数名称,也不用去关注参数类型,只需要确定参数的个数。

->:lambda运算符:这个运算符没有别的运算功能,只是将前后两个部分分隔,就是一个分隔符,没有别的含义

{}:方法体:重写方法的方法体需要写在大括号中,也成为Lambda体

特殊情况:

1、如果参数只有一个,可以将小括号省略;

2、如果方法体中的语句只有一句,可以将大括号还有分号省略

3、如果方法体中只有一句,并且是返回语句,可以将return、大括号、分号省略

如果需要省略内容,就需要将这三个部分全部省略,不然会报错

函数式接口的介绍

含义:

1、只有一个抽象方法的接口

2、是使用lambda表达式的前提

格式:

注解:@FunctionalInterface

检查是否是函数式接口的注解,如果是就编译通过,如果不是编译不通过

学习过的函数式接口:Runable  Comparator

 

 


本文链接: http://www.dtmao.cc/news_show_550464.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?