根据牛客网的面试经验的题进行的汇总,里面的内容是看别人的博客或者其东西进行汇总的,将这些的知识总结一下,方便自己查看和复习用
牛客网
文章目录
关键字
Java关键字
请你讲讲Java里面的final关键字是怎么用的?
类:此类不能有子类,即不能被继承,但是要注意final类中的所有成员方法都会被隐式地指定为final方法
方法:不允许继承的子类对此方法进行修改
变量:对于基本数据类型的变量的值不能再修改,相当于常量;对于引用数据类型,不能再指向其他变量
请你谈谈关于Synchronized和lock
- Synchronized
- synchronized是Java的关键字
- 用完后此锁的可以自动释放,不会造成死锁,线程执行发生异常,jvm会让线程释放锁
- synchronized不会让等待的线程响应中断
- lock
- Lock是一个接口
- 在finally中主动通过unLock()去释放锁,会造成死锁,因此使用Lock时需要在finally块中释放锁
- Lock可以让等待锁的线程响应中断
- 当无法获取到锁时,有可能会释放锁tryLock()
请你介绍一下volatile?
- volatile可以在多线程的情况中实现禁止指令重排的问题
- 可以实现可见性,因为每个线程都有自己的工作内存,将变量从主存中复制读取以后,对变量的操作,每个线程都是不可见的,除非操作完变量后将其写入内存,其他线程再读取,此时才可知道变量发生改变;但是volatile关键字使这个变量可见,即一个线程对这个变量进行修改时,其他线程会知道此变量发生变化了
- 被volatile定义的变量,系统每次用到它时都是直接从主存中读取,而不是各个线程的工作内存
请你介绍一下Syncronized锁,如果用这个关键字修饰一个静态方法,锁住了什么?如果修饰成员方法,锁住了什么?
修饰静态方法,锁住的是一个类,即只要的同一个类就会产生互斥
修饰成员方法,锁的是对象,即使是同一个类,只要对象不同,就不会产生互斥