Java基础知识总结梳理(五)
异常处理
异常处理部分内容相对简单,主要是异常体系结构图比较重要!
异常体系结构图
常见的异常–直接上图
异常注意事项
- 对于编译异常,程序中必须处理
- 对于运行时异常,程序中如果没有处理,默认就是throws的处理方式
- 子类重写的方法所抛出的异常类型要么是和父类抛出的异常一致,要么为父类抛出异常的类型的子类型
异常处理方式
- try-catch-finally :程序员子在代码中捕获发生的异常,自行处理
- throws:将发生的异常抛出,交给调用者(方法)来处理,最顶级的处理者就是JVM
throw和throws的区别
- throws:
- 异常处理的一种方式
- 位置:方法声明处
- 后面跟的东西:异常类型
- throw:
- 手动生成异常对象的关键字
- 位置:方法体中
- 后面跟的东西:异常对象
注解
- Override注解
限定某个方法,是重写父类方法,该注解只能用于方法 - Deprecated注解
用于表示某个程序元素(类、方法等)已过时 - SuppressWarnings注解
抑制编译器警告 - 四种元注解:修饰注解的注解
- Retention:指定注解的作用范围,三种SOURCE、CLASS、RUNTIME
- Target:指定注解可以在哪些地方使用
- Documented:指定该注解是否会在javadoc体现
- Inherited:子类会继承父类注解
多线程
Java基础知识梳理部分的多线程只涉及一些多线程的基础知识,后面会有多线程进阶,先看整理的多线程的基础知识框架图
线程介绍
- 进程和线程
- 进程是执行中的一段程序,而一个进程中执行的每个任务即为一个线程
- 一个线程可以属于一个进程,但一个进程能包含多个线程
- 线程无地址空间,它包括在进程的地址空间里
- 线程的开销或代价比进程的小
- 并行和并发
- 并发:同一时刻,多个任务交替执行,单核CPU实现多任务就是并发
- 并行:同一时刻,多个任务同时执行,多个CPU可以实现并行
线程使用
- 创建线程的两种方式
- 继承Thread类,重写run方法
- 实现Runnable接口,重写run方法
线程方法
- 常用方法
- setName
- getName
- start
- run
- setPriority
- getPriority
- sleep
- interrupt
- yield
- join
- 用户线程和守护线程
- 用户线程:也叫工作线程,当线程的任务执行完或者通知方式结束
- 守护线程:一般是为工作线程服务的,当所有的用户线程结束,守护线程自动结束;常见的守护线程:垃圾回收机制
线程的生命周期
- NEW
- RUNNABLE
- READY
- Running
- BLOCKED
- WAITING
- TIMED_WAITING
- TERMINATED
Synchronized
- 同步代码块
- 同步方法
互斥锁
- 同步方法如果没有使用static修饰:默认锁对象为this
- 如果方法使用static修饰,默认锁对象:当前类.class
- 需要先分析上锁的代码;选择同步代码块或同步方法;要求多个线程的锁对象为同一个即可!
死锁
- 互斥条件:
一个资源同一时间同只能被一个线程占用 - 不可剥夺条件
一个资源被占用之后,如果不是拥有资源的线程释放,那么其他线程得不到此资源 - 请求并持有条件
当一个线程拥有某个资源之后,还不满足,又在请求其他资源 - 环路等待条件
多个线程在请求资源的情况下,形成了环路链
参考内容:
【1】https://www.bilibili.com/video/BV1fh411y7R8?spm_id_from=333.337.search-card.all.click&vd_source=dd9bdf6f42e38406b07ef92b986e8171