`

java-公平锁与非公平锁synchorizned与ReentrantLock

阅读更多

1、ReentrantLock构造函数提供了2种公平性的选择:

1)创建公平锁。如果锁已经被其他线程战友有,新的请求线程会加入到等待队列,或者已经有一些线程在等待锁了。

2)创建非公平锁,线程按顺序请求获得公平锁,而一个非公平锁可以闯入,如果锁的状态可用,请求非公平锁的线程可在等待队列中向前跳跃,获得该锁。内部锁synchronized没有提供确定的公平性保证

2、在synchronized和ReenrantLock之间进行选择

在synchronized内部锁不能满足使用时,ReentrantLock才能做为更高级的工具。当你需要以下特性时,才应使用:

1)可定时的、可轮询的与可中断的锁获取操作

2)公平队列或非块结构的锁

JAVA5。0中内部锁比ReentrantLock相比,有另一个优点:线程转储能显示哪些个调用框架获得了哪些锁,并能识别发生了死锁的那些线程。JAVA6解决了这个问题

 

http://deepfuture.iteye.com/category/93633?page=4&show_full=true

分享到:
评论

相关推荐

    ReentrantLock源码详解--公平锁、非公平锁

    ReentrantLock源码详解--公平锁、非公平锁 ReentrantLock是一种重入锁,实现了Lock接口,能够对共享资源重复加锁,即当前线程获取该锁再次获取不会被阻塞。ReentrantLock的可重入性是通过继承AQS...

    第五章 ReentrantLock源码解析1--获得非公平锁与公平锁lock()1

    《深入理解ReentrantLock:非公平锁与公平锁的实现》 ReentrantLock作为Java并发编程中的重要工具,它的灵活性和高效性使得它在多线程环境下被广泛使用。本篇文章将深入解析ReentrantLock的源码,重点讨论非公平锁...

    Java 多线程与并发(11-26)-JUC锁- ReentrantLock详解.pdf

    ReentrantLock的内部类Sync继承自AQS,进一步分为FairSync(公平锁)和NonfairSync(非公平锁)两个子类。公平锁确保线程按照它们请求锁的顺序获取锁,而非公平锁则不保证这种顺序,可能会有线程插队获取锁。 **...

    java 线程公平锁与非公平锁详解及实例代码

    Java线程公平锁与非公平锁是并发编程中重要的概念,尤其在使用ReentrantLock时。ReentrantLock是Java并发包(java.util.concurrent)中的一个可重入互斥锁,它提供了比内置的synchronized关键字更为灵活的锁操作。 ...

    多线程(11)ReentrantLock公平锁与非公平锁(修改)1

    总的来说,这段代码展示了`ReentrantLock`的公平和非公平锁的使用,并通过`CountDownLatch`进行多线程同步。了解这两种锁的区别和应用场景对于优化并发程序的性能和线程调度非常重要。在实际开发中,应根据具体需求...

    公平锁&非公平锁.pdf

    公平锁(Fair Lock)和非公平锁(Non-Fair Lock)是 Java 中的两种锁机制,用于实现线程同步。它们都继承自 AbstractQueuedSynchronizer(AQS),是 ReentrantLock 的基础实现。 公平锁的特点是,它会按照线程的...

    Java多线程之ReentrantLock与Condition - 平凡希 - 博客园1

    - `ReentrantLock(boolean fair)`:创建公平锁或非公平锁,取决于`fair`参数。 - `getHoldCount()`:返回当前线程持锁的次数。 - `getOwner()`:返回当前持有锁的线程,如果没有线程持有,则返回`null`。 - `...

    Java线程公平锁和非公平锁的差异讲解

    Java线程公平锁和非公平锁是Java并发编程中重要的概念,主要体现在`java.util.concurrent.locks`包下的`ReentrantLock`类中。`ReentrantLock`提供了可配置的公平性和非公平性,允许开发者根据应用需求选择合适的锁...

    带你看看Java的锁(一)-ReentrantLock

    带你看看Javad的锁-ReentrantLock前言ReentrantLock简介Synchronized对比用法源码分析代码结构方法分析SyncNonfairSyncFairSync非公平锁VS公平锁什么是公平非公平ReentrantLockReentrantLock的构造函数lock加锁方法...

    advanced-java-master.zip

    本资源包"advanced-java-master.zip"主要涵盖了Java后端开发的高级主题,源自GitHub,旨在为开发者提供便捷的下载途径。这个压缩包中包含了一个完整的项目目录,让我们来逐一探讨其中可能涉及的知识点。 1. **Java...

    java ReentrantLock详解.docx

    例如,可以通过构造函数传入`true`参数创建公平锁,这样线程会按照等待顺序获取锁,而不是像非公平锁那样随机获取。默认情况下,`ReentrantLock`是非公平的。`lock.isFair()`可以检查锁是否为公平锁。 3. **可中断...

    Java并发之ReentrantLock类源码解析

    其中,fair参数表示是否使用公平锁,如果为true,则使用公平锁,否则使用非公平锁。 ReentrantLock的锁机制 ReentrantLock的锁机制是通过CAS(Compare-And-Swap)操作来实现的。CAS操作是原子操作,用于更新对象内...

    ReentrantLock与synchronized

    - 支持公平锁(通过构造函数传入`true`)和非公平锁(默认)。 3. **高级功能**: - 可以尝试获取锁:`tryLock()`方法可以在无法立即获取锁时返回,避免了不必要的等待。 - 可中断锁:通过`lockInterruptibly()`...

    Java-concurrency-master.zip

    2. **线程同步**:在多线程环境下,数据共享可能导致数据不一致问题,Java提供了多种同步机制,如`synchronized`关键字、`Lock`接口(包括`ReentrantLock`)以及`volatile`关键字,以确保线程安全。 3. **并发集合*...

    Java-JUC-多线程 进阶

    Java-JUC-多线程进阶 Java-JUC-多线程进阶resources是 Java 并发编程...公平锁非公平锁 公平锁和非公平锁是 Java 中的两种锁机制,公平锁按照线程的请求顺序提供锁,非公平锁按照线程的请求顺序和锁的可用性提供锁。

    java锁详解.pdf

    4. 非公平锁:非公平锁是 ReentrantLock 锁的一种实现方式,允许线程竞争锁。 5. 可重入锁:ReentrantLock 锁支持可重入锁机制,允许线程多次获得锁。 三、Volatile 原理 1. volatile 关键字:volatile 关键字用于...

    详解java并发之重入锁-ReentrantLock

    2. `public ReentrantLock(boolean fair)`: 这个构造方法可以创建一个公平锁或非公平锁,取决于 `fair` 参数的值。如果 `fair` 为 `true`,那么创建的是公平锁,否则创建的是非公平锁。 推荐使用 `private static ...

    ReentrantLock源码详解--条件锁

    ReentrantLock源码详解中最重要的一个部分就是条件锁,条件锁是指在获取锁之后发现当前业务场景自己无法处理,而需要等待某个条件的出现才可以继续处理时使用的一种锁。今天我们来详细介绍条件锁的原理和实现。 ...

    22 到底哪把锁更适合你?—synchronized与ReentrantLock对比.pdf

    - `ReentrantLock`是Java.util.concurrent包下的一个类,提供了更多高级功能,如可中断、可公平/非公平锁以及尝试获取锁等。它在灵活性和控制性上超过了`synchronized`,但使用时需要更加谨慎,因为必须手动释放锁...

    Java中ReentrantLock的使用.docx

    尽管如此,ReentrantLock仍然有其独特之处,比如它可以提供公平锁和非公平锁的选择,支持中断锁等待,以及更细粒度的控制线程间的唤醒与等待。 1. **Lock接口**: - `lock()`:获取锁,如果无法立即获取,线程会被...

Global site tag (gtag.js) - Google Analytics