博主将会针对 Java 面试题写一组文章,包括 J2ee ,SQL,主流Web框架,中间件等面试过程中面试官经常问的问题,欢迎大家关注。一起学习,一起成长。
synchronized 可重入锁验证:
代码demo:
log:
线程 :-【 多线程 0】-进入等待状态! 线程:-【多线程2】-进入等待状态! 线程:-【多线程3】-进入等待状态! 线程:-【多线程4】-进入等待状态! 线程:-【多线程1】-进入等待状态! 已设置设置-【多线程0】-名称! 获取-【多线程0】-线程名称! 已设置设置-【多线程1】-名称! 获取-【多线程1】-线程名称! 已设置设置-【多线程4】-名称! 获取-【多线程4】-线程名称! 已设置设置-【多线程3】-名称! 获取-【多线程3】-线程名称! 已设置设置-【多线程2】-名称! 获取-【多线程2】-线程名称!
分析LOG、得出结论:
1.set()方法中顺利进入了get()方法,说明synchronized的确是可 重入锁 。
2.【多线程0】先进入get方法体,这个时候【多线程1】、【多线程2】、【多线程3】等待进入,但当【多线程1】离开时,【多线程4】却先进入了方法体,没有按照1、2、3、4的顺序进入get方法体,说明sychronized的确是 非公平锁 。
3.在一个线程进入get方法体后,其他线程只能等待,无法同时进入,验证了synchronized是 独占锁。