复学day12
初识Callable接口
实现步骤:
1、实现Callable接口,需要返回值类型
2、重写call方法,抛出异常
3、创建目标对象
4、创建执行服务:ExecutorService service =Executors.newFixedThreadPool(1);//池子
5、提交执行:Future
6、获取结果:boolean r1 = result1.get();
7、关闭服务:service.shutdownNow();
该部分知识课程一笔带过,目前仅了解Callable实现多线程是从ExecutorService类中创建出了一个FixedThreadPool线程池对象,将线程任务作为参数执行线程池对象的submit方法,该方法会有布尔类型的返回值,最后关闭服务
静态代理/StaticProxy
关于代理,个人感觉类似于现在的外包机构,用来服务甲方能力内但业务外的一种机构,如华为外包(本身技术能力是可以做这些事的,但是委托给外包更划算);在学习过程中,这种模式其实已经接触过了,就是学到的,通过实现Runnable()接口,进行多线程任务。
在昨天的复学过程中,多线程可通过继承Thread类、实现Runnable接口以及今天学到的实现Callable接口实现多线程事务。其中,通过实现Runnable接口的本质便是静态代理。
通过实现Runnable接口实现多线程的过程为定义一个Runnable接口的实现类,该实现类覆盖重写run()方法,然后创建一个Thread的匿名类,把实现类作为参数提交给new出的Thread类,通过thread类的start方法开启新线程。细究,thread类也是继承实现了Runnable接口,该类也重写run()方法,所以可以说thread是该实现类的静态代理。
Lamda表达式
从Java8开始引入,它的出现是为了避免匿名内部类定义过多,简化代码的作用,函数式编程,语法糖。
函数式接口(Functional Interface)是lambda表达式的关键。
任何接口,如果只包含唯一 一个抽象方法,那么他就是一个函数时接口,对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
借由Lambda表达式可以看出,java发展至今,其语法也是逐步在简化。最初的定义函数式接口时必须要借实现类体现,后续静态内部类、局部内部类、匿名内部类—>lambda表达式
public class Demo{
//首先定义一个函数式接口ILove
interface ILove{
void love(int a);
}
/*
二、将Love类的定义移动到Demo类内,静态代码出现
static class Love implements ILove{
@override
public void love(int a){
System.out.println("I love you");
}
}
*/
public static void main(String args[]){
/*
三、将Love类的定义移动到方法内,局部内部类出现
class Love implements ILove{
@override
public void love(int a){
System.out.println("I love you");
}
}
*/
/*
四、匿名内部类的出现
ILove love = new ILove(){
@override
public void love(int a){
System.out.println("I love you");
}
};
love.love(1);
*/
ILove love = new Love();//当匿名内部类时,该语句省略。
//五、Lambda表达式登场,由匿名内部类简化,简化了new ILove()、love方法名
ILove love = (int a)->{System.out.println("I love you");};
//继续简化,简化参数类型
ILove love =(a)->{System.out.println("I love you");};
//继续简化,简化参数括号
ILove love = a->{System.out.println("I love you");};
//继续简化,当只有一行代码时,简化语句花括号
ILove love = a->System.out.println("I love you");
love.love(2);
}
}
/*
//一、最初建立一个接口实现类
class Love implements ILove{
@override
public void love(int a){
System.out.println("I love you");
}
}
*/
浙公网安备 33010602011771号