Chapter 8 异常
1、Error类由系统使用,用户不能使用,用于处理系统在运行环境方面产生的异常,如Java虚拟机错误,类状态错误等。
Exception 类用于处理程序自身的错误,包括编译期错误和运行期错误。其中RuntimeException及其子类属于运行期异常,其余属于编译期异常
2、运行期异常:
ArithmeticException、ArrayStoreException、NullPointerException
注:浮点数除0不会产生ArithmeticException ;运行期异常都是隐式异常,可以不用捕捉
编译期异常:
InstantiationException、ClassNotFoundException、
3、throw子句写在方法体中或者构造体中,throw子句单独使用时只能抛出运行期异常,否则要与throws字句搭配使用;
除了RuntimeException以及Error之外,其他需要抛出的异常都必须在throws字句中声明
4、override 重写方法抛出的异常可以少于父类,甚至不抛出异常
Chapter 13 线程
1、JVM允许多个线程同步执行,但是一般将线程控制在100个以内
2、单CPU情况下,执行多线程时,Java采用优先级调度的方式
3、yield方法强制当前运行的线程让出CPU使用权,使当前线程从运行状态过渡到就绪状态
但以下两种情况例外 :
(1) 当前就绪队列中没有等待运行的线程
(2) 当前就绪队列中没有与调用yield线程的相同优先级的线程
4、suspend和resume方法破坏了面向对象的封装性,因为它们允许任意其他线程控制一个线程的挂起和恢复,使得线程运行不安全,另外suspend包含了对象锁,容易引起“死锁”现象。
5、join方法将当前运行的线程处于等待状态,直到调用join方法的线程执行完毕。
6、一旦将某个线程指定为一个线程组,就不能在转移到别的线程组中了;
线程组中还可以包含其他线程组,但是线程只能访问自己线程组的信息,不能访问父线程组和其他线程组的信息。
7、当synchronized语句体结束时,无论是否抛出异常,解锁操作都会自动完成。
8、每个对象或者每个class都有一个“标志锁”
9、同步代码块中的数据必须只能在该块中才能访问,否则就失去了保护数据不被同时修改的意义。
10、wait和notify方法必须在synchronized里使用 ,否则会导致编译错误
11、yield方法用于当前正在执行的线程进行退让,因此只能使用yield()和this.yield()两种形式
12、线程进入block状态的几种情况:
(1) 线程执行了suspend()方法
(2) 线程执行了sleep()方法
(3) 线程使用wait()方法来等待条件变量
(4) 线程等待I/O资源的获取