本文共 1079 字,大约阅读时间需要 3 分钟。
可定时的与可轮询的锁获取模式是由tryLock方法实现的,与无条件的锁获取模式相比,它具有更完善的错误恢复机制。在内置锁中,死锁是一个严重的问题,恢复程序的唯一办法是重新启动程序,而防止死锁的唯一方法就是在构造程序时避免出现不一致的锁顺序。可定时的与可轮询的的锁提供了另一种选择,避免死锁的发生。通过重新获取及释放锁来避免死锁。
大多数情况下,非公平锁的性能要高于公平锁的性能,原因是后者为了实现公平,会有更多的线程上下文切换成本。
当持有锁的时间较长,或者请求锁的平均时间间隔较长,那么应该使用公平锁。在这些情况下,允许“插队”带来的吞吐量提升(当锁处于可用的状态时,线程却还处于被唤醒的过程中)则可能不会出现。
在一些内置锁无法满足需求的情况下,ReentrantLock可以作为一种高级工具。当需要一些高级功能时才应该使用ReentrantLock,这些功能包括:可定时的、可轮询的与可中断的锁获取操作,公平队列,以及非块结构的锁。
否则,还是应该优先使用synchronized.
当锁的持有时间较长并且大部分操作都不会修改被守护的资源时,那么读-写锁能提高并发性。
如果写操作也很频繁,那可能独占锁更合适一些,因为写操作太多,竞争会很激烈,再加上协调读写锁,性能反而不如独占锁了。
转载地址:http://htlxb.baihongyu.com/