面试题day02
1.Reentranlock和Synchronized的区别
synchronized
1.是通过monitor对象(监视器锁)来完成,monitorenter进入synchronized锁,monitoreixt正常退出synchronize的锁
2.不需要手动释放锁
3.不可中断类型的锁
4.非公平锁
5.不能绑定condition
6.synchronize锁的是对象
锁的状态有四种,随着锁的竞争,锁会从无锁到偏向锁到轻量级锁到重量级锁,单向的过程
偏向锁的核心思想是,如果一个线程获得了锁,那么锁就进入偏向模式,当这个线程再次请求锁时,无需再做任何同步操作
轻量级锁能够提升程序性能的依据是“对绝大部分的锁,在整个同步周期内都不存在竞争
轻量级锁失败后,虚拟机为了避免线程真实地在操作系统层面挂起,还会进行一项称为自旋锁的优化手段。自旋锁会假设在不久将来,当前的线程可以获得锁
Reentranlock
1.等待可中断
2.公平锁,非公平锁可设置
3.绑定condition
4.锁的是线程
原理:AQS+CAS
第一个获取锁的线程就做了两件事情:state=1,thread为当前线程
当多个线程同时尝试占用同一个锁时,CAS操作只能保证一个线程操作成功,剩下的只能乖乖的去排队啦。
“非公平”即体现在这里,如果占用锁的线程刚释放锁,state置为0,而排队等待锁的线程还未唤醒时,新来的线程就直接抢占了该锁,那么就“插队”了。公平锁需要关心队列的情况,得按照队列里的先后顺序来获取锁(会造成大量的线程上下文切换)
2.prepareStatement的用法和解释
1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程PreparedStatement 就相当于是一个信使的作用,它是Statement的子接口
1)、批量处理的时候效率高
2)、preparestatement 具有防sql注入
3)、代码可读性比较好