Java教程

面试题day02

本文主要是介绍面试题day02,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

面试题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)、代码可读性比较好

这篇关于面试题day02的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!