关键字
final关键字
当用final修饰一个类时,表明这个类不能被其他类继承。final类中的成员变量可以根据需求决定是否被final修饰,而final类中修饰的方法被隐形地指定为final方法。
使用fianl方法的原因有两个:一是把方法锁住,避免继承类修改它的含义,而是效率,在早期Java实现版本中,会将final方法转为内嵌调用,一定程度上会提高效率。但是在当前的Java版本,不需要使用final进行优化了。(补充版本)
对于一个final变量,如果是基本数据类型的变量,在初始化后数值不能改变;如果是对象,则在初始化后引用的对象不能改变,而对象的属性可以进行修改。
Synchronized和Lock
Syschronized是Java的关键字,当它用来修饰某个方法或者代码块时,能够保证在同一时刻最多只有一个线程执行该代码。在Java1.5之后引入了自旋锁,锁粗化,轻量级锁,偏向锁等优化该关键字的性能。
Syschronized修饰静态方法以及同步代码块锁住的是类,需要获得类锁,修饰成员方法线程需要获得的是当前调用该方法的对象实例的对象锁。
Lock是一个接口,Syschronized是一个关键字。Syschronized能够在发生异常的时候,自动释放线程占用的锁,因此不会有死锁的情况发生,而Lock在发生异常时不能自动释放锁,如果没有主动使用unLock()方法去释放锁,可能会造成死锁的情况发生,因此在使用Lock时,需要在finally块中释放锁。Lock可以让等待锁的线程响应中断,而Syschronized不能。Lock能够知道能不能成功获取到锁,而Syschronized不能。
volatile
volatile关键字是用来保证有序性和可见性的。(待补充)