1.反射
1.1 反射是什么?
反射机制是Java程序,在运行中,动态获取类的信息(方法、属性、注解等)、并且还可以调用类的属性、和方法。这种动态获取类的信息、以及动态调用对象的方法和属性的行为就叫反射。 >>>反射:就是可以获取类的信息、和执行方法。
1.2 反射可以做什么
1.运行时获取类中的属性
2.运行时获取类中的方法
3.运行时创建类的对象
4.运行时,执行类中的方法
5.运行时,校验属性是否属于某个类
6.实现动态代理
1.3 反射怎么用
通过反射实现,类中的属性、方法的获取。还可以运行类中的方法。
创建Class对象的几种方式: > 1.类名.class > > 2.Class.forName > > 3.对象名.getClass
代码演示:获取类中的属性
代码演示:获取类中的方法
代码演示:通过反射执行类中的方法
2.进程和线程
2.1 进程
> 进程:软件在运行时一种状态。会占用CPU、内存等号资源 > > 正在运行的程序 >
进程的特点: > > 1.独立性 > > 2.动态性 > > 3.并发性
2.2 线程
> 线程:代码的执行路径,是进程的组成部分,一个进程可以有多个线程。每个线程都可以执行自己的内容或者多个线程共同执行一个任务 > > 有了多线程,就可以同时干多件事情 > 线程是CPU的最小调度单位,CPU可以很快的在多个线程间实现切换。 > > 运行时的线程,随时都可以被CPU给挂起。 > > 线程的抢占发生在任意时期。
2.3 进程和线程的区别
1、一个程序,可以有多个进程
2、一个进程可以有多个线程。但是必须要有一个主线程
3、进程间不能共享资源,但是线程间可以共享资源。
2.4 线程的体验和创建方式
敲黑板:java中的main方法其实就是主线程,main内部的代码执行都是主线程在执行。 我们自己手动创建线程,都叫子线程
2.5 线程的说明
1.Java中的线程类:Thread
2.Java中的线程都需要接口,线程接口:Runnable 接口内部只有一个方法:run public void run();
3.每次在写子线程的时候,都需要在run方法内部实现自己要干的事情
4.启动线程是用的start方法
2.6 线程的创建方式
日常使用线程,常用的三种创建方式。
1.实现Runnable接口
2.自定义类实现Thread类的子类,重写run方法
3.实现Callable接口
2.6.1 实现Runnable接口实现线程
1.采用匿名内部类 直接完成接口的实例化,并重写run方法
2.自定义类实现接口,重写run方法
代码演示:基于Runnable接口实现线程:
代码演示:采用匿名内部类 直接完成接口的实例化
代码演示:继承Thread类实现线程。创建类继承Thread,并重写run方法
代码演示:使用Callable实现线程
jdk新版本推出线程创建方式,线程可以带返回值。
1.实现Callable接口,并指定线程的返回值类型
2.创建FutureTask对象
3.创新线程对象,并传递任务对象
4.启动线程
5.获取线程的返回值
2.6.2 总结:三种创建方式的区别
> 继承Thread类: > > 编写简单、单继承,所以这种类无法再继承其他类、无法实现多个线程的资源共享、扩展性无
> 实现Runnable接口: > > 编写复杂一点,接口可以多实现,可以实现多个线程的资源共享 推荐使用 >
实现Callable接口: > > 编码复杂,可以实现线程执行完之后进行值的返回 > 开发中,需要线程返回值,就使用Callable,不需要返回值的就可以Runnable5.8
2.7 线程状态
2.7.1 线程的状态(生命周期)
简图:
2.8 线程的分类
2.8.1 线程分为:用户线程和守护线程。Java中默认创建的线程就是用户线程。
代码演示:用户线程和守护线程
2.8.2 用户线程和守护线程的区别
代码演示 :
当用户线程销毁的时候,会将自己的守护线程一起销毁!
2.9 线程的优先级
线程的优先级就是线程获得CPU的概率,优先级越高,获取CPU的概率越大 从小到大,1-10之间。10是优先级最高,默认的优先级是5。
2.9.1 设置优先级
通过线程的setPriority 设置线程的优先级。
通过线程的getPriority获取线程的优先级。
设置优先级需要在start之前设置。
3.0 Lambda表达式
Lambda是JDK8之后支持的一种简写模式。可以快速的实现接口的实例化。
语法格式:(参数)->{方法重写}
规则: 1.接口 2.接口中只能有一个抽象方法 3.Lambda表达式的结果是一个对象
代码演示: