并发-ReentrantLock

how

java 复制代码
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class MyRunnable implements Runnable {
    private int count = 0;
    private final Lock lock = new ReentrantLock(true);

    @Override
    public void run() {
        lock.lock();
        try {
            count++;
            lock.lock();
            try {
                count++;
            } finally {
                lock.unlock();
            }
        } finally {
            lock.unlock();
        }
    }
}
java 复制代码
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

public class MyRunnable implements Runnable {
    private int count = 0;
    private final Lock lock = new ReentrantLock();

    @Override
    public void run() {
        boolean b = lock.tryLock();
        try {
            if (b) {
                count++;
            }
        } finally {
            lock.unlock();
        }

    }
}

when

Java锁机制浅析:到底什么情况下该用ReentrantLock?-51CTO.COM

公平锁

代码嵌套且每一层加同一个锁

源码

java 复制代码
构造方法
参数为false是非公平锁,非公平锁是一个静态内部类继承Sync AQS实现的,先通过CAS修改state变量为1,如果失败,就将线程封装为Node加入双向队列
参数为true是公平锁,公平锁是一个静态内部类继承Sync实现的,线程先进入双向队列,然后再通过CAS修改state变量为1
java 复制代码
lock()
公平锁
非公平锁
java 复制代码
tryLock()
尝试加锁,如果失败,就继续执行下面的代码
相关推荐
Lizhihao_1 分钟前
Spring MVC 接口的访问方法如何设置
java·后端·spring·mvc
winfredzhang3 分钟前
使用Python和Selenium打造一个全网页截图工具
开发语言·python·selenium
mahuifa11 分钟前
(10)python开发经验
开发语言·python
_龙小鱼_20 分钟前
Kotlin扩展简化Android动画开发
android·开发语言·kotlin
_龙小鱼_21 分钟前
Kotlin 作用域函数(let、run、with、apply、also)对比
java·前端·kotlin
小伍_Five26 分钟前
spark数据处理练习题详解【上】
java·开发语言·spark·scala
Mcband27 分钟前
EasyExcel动态表头
java·windows
曼岛_35 分钟前
[Java实战]Spring Boot整合RabbitMQ:实现异步通信与消息确认机制(二十七)
java·spring boot·java-rabbitmq
mascon36 分钟前
C#自定义扩展方法 及 EventHandler<TEventArgs> 委托
开发语言·c#
程序猿七度1 小时前
【Arthas实战】使用场景与常用命令
java·jvm·arthas