Java基础5
unit1 异常
1.概念:本身是一个类,产生异常就是创建异常对象并且抛出此对象,处理异常采用中断处理
2.分类:java.lang.Throwable Exception子类:RuntimeException

Alt + Enter : 解决异常
编译异常:直接修改
运行异常:无需处理
错误:改逻辑。。。
A:throws Exception,给虚拟机处理
B:try {可能出现异常的代码 } catch() { 异常处理逻辑 },处理异常
3.产生过程解析:
A:JVM创建一个异常对象,方法中没有异常处理的逻辑
B:然后抛出此对象,传给main方法处理,main又抛给了JVM处理
C:JVM接受后,将异常的情况,以红色字体打印在控制台;JVM终止当前正在执行的内容(中断处理)
4.throw:


补充:Objects非空判断:

throws:声明异常

5.try-catch:捕获异常

6.throwable:

7.finally:不论是否发生异常,都需要执行

8.其他:

finally里面有return:一般不把里面添加return
子类父类异常:父类什么样子,子类就是什么样
9.自定义异常:

unit2 并发与并行
1.进程 线程


2.并发 并行

3.主线程 多线程
主线程:执行主方法的线程,执行main方法的
单线程:从main方法开始

4.Thread类:



多线程原理:随机性打印结果:
压栈执行:main--run 堆内存存储:对象


5.sleep方法:程序暂停执行
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
6.匿名内部类实现线程创建:子类(实现类对象),没有名字,new FU() { 重写方法 }
7.线程安全问题:多线程访问共享的数据,会产生安全问题
线程安全解决1:同步代码块----同步技术原理:同步中的线程没有执行完毕不会释放线程,同步外的线程没有锁进不去线程


线程安全解决2:同步方法--静态同步方法也是可以保证安全的


线程安全解决3:Lock锁

8.线程状态:6种

9.等待唤醒机制:
计时等待:

锁阻塞:

无限等待:等待唤醒案例=线程之间的通信
TimeWaiting(计时等待):
A:sleep(long m),之后进入Runnable/Blocked状态 B:wait(long m),自动唤醒,之后进入。。
唤醒方法:
void notify()单个 void notifyAll()所有
10.线程间通信=等待与唤醒机制:协作,竞争,多个线程在操作同一个变量是使用或者操作
判断变量是否存在--》唤醒线程A生产--》修改变量状态--》通知B,唤醒线程B消费--》B消费完了
方法:wait() notify() notifyAll()
结论:如果可以获取锁,可以从WAITING--》RUNNABLE状态
否则从wait set 出来,又进入 entry set ,WAITING--》BLOCKED状态

11.线程池:![]()
包:java.util.concurrent---> 类:Executors,生产线程池的工厂类--->newFixedThreadPool( int nThreads)

12.Lambda表达式:函数式编程思想:强调结果,不论什么形式来做
面向对象思想:强调过程,找对象来完成思想
实现采用“”匿名内部类“”:无参,无返回值,代码块。。。
可推导,可省略

//Lambda表达式,简化
invoke(20,10,(int a, int b)->{
return a + b;
});

浙公网安备 33010602011771号