欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JDK1.8新特性

程序员文章站 2022-03-04 08:41:20
...
	1.接口
			回顾:只有方法签名,没有方法体
						默认方法是public  abstract修饰的
						具体的方法的业务是其实现类做的	
								抽象方法,是必须被覆写的
								可以new接口,使用匿名内部类,覆写抽象方法。

		为什么要抽取接口?	
			面向接口编程,只需要管声明,有需求,传什么参数,返回对应的结果。
			只有对业务熟悉,才会抽取规范的接口。

	接口的抽象方法可以被继承或实现。

	调用接口的方法:两种方式。new实现类或定义一个匿名内部类

接口中有方法体的方法:
	静态方法:
		接口的方法可以写方法体,只需要添加static修饰,但是static修饰的方法不能被覆写。不能被实现类调用,也不能被子类继承。只能使用类名进行调用。

用处:

	default方法:
		① 可以被实现类调用
		② 能被子类继承并覆写
		③
default的用处:接口 的方法的实现,每个实现内的方法体都是一样的,类似于抽取base类。并可以被覆写,实现特有的方法
	需求增加一个功能,可以只改接口,面向接口编程
	接口里写了方法体,所有的实现类和子类都有这个方法,都可以调用,不用再覆写
	我们已经开放好功能了,需要增加需求功能,原始的方法是,接口定义一个抽象方法,每一个实现类覆写。现在,使用default,可以直接在接口中定义default方法体,实现类可以不用管。

	函数式接口:
		有且仅有一个抽象方法(Object类的public方法除外)
		@FunctionInterface  打在接口上,表示此接口为一个显示的函数式接口
		隐式函数式接口

	lambda表达式:(基于函数式接口实现的)
		如果函数体只有一句,且有返回值,{}和return可以一起省
		如果只有一个参数,参数的()可以省
		没有参数,需要使用()作为占位符

	内部类中使用一个外部的变量,这个变量必须是final修饰的
	同样lambda一样,

		lambda可以替代匿名内部类

stream

   

线程和线程并发

	1.线程和进程的区别?
		进程是资源分配的最小单位
		线程是程序执行的最小单位
		一个进程可以有多个线程组成,多线程共享数据就会造成线程不安全问题。
		解决线程安全问题,尽力避免资源共享问题。
	2.创建线程的方式
		继承Thread类
				重写run方法,自己实现业务逻辑
				使用start启动线程。
		实现Runnable接口
				覆写run方法,然后将
		实现callable接口,需要返回值的时候,使用
				实现call方法
		要区别run和start,通过start启动起来。线程需要抢占CPU资源,获取到资源的时候,再运行
		3.线程的生命周期(自己能画)
			。
		4.线程同步
			只有多线程访问共同资源的时候,就会出现线程安全问题
			解决方案就是:对资源进行加锁
					synchronized
								可以添加在方法和类上面。
								不需要自己进行解锁
								是JVM级别的,JVM发现有此修饰符会使用monitor进行监视,当monitor被占用的时候,就会被锁定。有此标签标示资源被占用。
					Lock		(属于concurrent包下的)	
								是java代码级别的,我们认为可以进行一个控制,使用完毕之后,需要手动释放锁。未放,就容易造成死锁。
							  尽量避免线程安全的问题,即							①避免类级别的共享的变量。如:变量尽量是小范围的,避免使用类级别的变量。
							  	②添加同步或锁,锁住资源
							  	③使用ThreadLocal,解决多线程的并发安全问题(当前线程作为一个key,传入的值作为value,不同的key线程对应不同的value,实现了线程的隔离)
							  				内部使用的是map来存取,为每个线程创建一个副本,map内部存放的的是,每一个线程进入都会创建了一个map,通过map就将线程之间隔离开了。获取资源的时候,通过map内部的key,获取对应的value
		。 
		5、线程池
			在excutor内上面,注意有些0,表示是没有限制