身为JAVA工作者必须了解的实战知识(十二)

来源:互联网 发布:妙笔生花软件使用教程 编辑:程序博客网 时间:2024/06/05 11:39

一、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程序员的道路上,我们可以一起学习、一起进步