一、Lock与 ReentrantLock
Lock 提供一种无条件的、可轮询的、定时的、可中断的锁获取操作,所有加锁和解锁的方法都是显式的。
[java]view plaincopy
print?
publicinterfaceLock {
voidlock();// 获取锁。
voidlockInterruptibly()throwsInterruptedException;// 如果当前线程未被中断,则获取锁。
booleantryLock();// 仅在调用时锁为空闲状态才获取该锁。
// 如果锁在给定的等待时间内空闲,并且当前线程未被中断,则获取锁。
booleantryLock(longtime, TimeUnit unit)throwsInterruptedException;
voidunlock();// 释放锁。
Condition newCondition();// 返回绑定到此 Lock 实例的新 Condition 实例。
}
[java]view plaincopy
print?
Lock lock =newReentrantLock();
lock.lock();
try{
// 更新对象状态
// 捕获异常,并在必要时恢复不变性条件
}finally{
lock.unlock();
}
1 轮询锁与定时锁
通过tryLock来避免锁顺序死锁
2 可中断的锁获取操作
[java]view plaincopy
print?
publicbooleansendOnSharedLine(String message)throwsInterruptedException {
lock.lockInterruptibly();
try{
returncancellableSendOnSharedLine(message);
}finally{
lock.unlock();
}
}
privatebooleancancellableSendOnSharedLine(String message)throwsInterruptedException {
}
3 非块结构的加锁
二、性能考虑因素
ReentrantLock在Java 5.0比内置锁提供更好的竞争性能。
Java 6使用了改进后的算法来管理内置锁,与在ReentrantLock中使用的算法类似,该算法有效地提高了可伸缩性。
三、公平性
ReentrantLock的构造函数提供两种公平性选择:非公平锁、公平锁。
针对Map的性能测试,公平锁、非公平锁、ConcurrentHashMap。
四、在synchronized和ReentrantLock之间进行选择
在一些内置锁无法满足需求的情况下,ReentrantLock可以作为一种高级工具。当需要一些高级功能时才应该使用ReentrantLock,这些功能包括:可定时的,可轮询的与可中断的锁获取操作,公平队列,及非块结构的锁。否则,还是应该优先使用synchronized.
以上就是我推荐给Java开发者们的一面试经典知识。但是这些知识里面并没有太多Java全栈、Java晋阶、JAVA架构之类的题,不是我不推荐,而是希望大家更多的从基本功做起,打好基础,太多复杂的内容一会儿也说不明白。
好了同学们,我能介绍的也都全部介绍完给你们了,如果下获得更多JAVA教学资源,可以选择来我们这里共同交流,群:240448376,很多大神在这里切磋学习,不懂可以直接问,晚上还有大牛免费直播教学。
注:加群要求
1、具有一定工作经验的,面对目前流行的技术不知从何下手,需要突破技术瓶颈的可以加,有些应届生和实习生也可以加。
2、在公司待久了,过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的可以加。
3、如果没有工作经验,但基础非常扎实,对java工作机制,常用设计思想,常用java开发框架掌握熟练的,可以加。
4、觉得自己很牛B,一般需求都能搞定。但是所学的知识点没有系统化,很难在技术领域继续突破的可以加。
5.阿里Java高级大牛直播讲解知识点,分享知识,多年工作经验的梳理和总结,带着大家全面、科学地建立自己的技术体系和技术认知!
PS:现在主要讲解的内容是(反射原理、枚举原理与应用、注解原理、常用设计模式、正规表达式高级应用、JAVA操作Office原理详解、JAVA图像处理技术,等多个知识点的详解和实战)
6.小号或者小白之类加群一律不给过,谢谢。
最后,每一位读到这里的网友,感谢你们能耐心地看完。觉得对你有帮助可以给个喜欢!希望在成为一名更优秀的Java程序员的道路上,我们可以一起学习、一起进步