并发-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()
尝试加锁,如果失败,就继续执行下面的代码
相关推荐
渣哥6 分钟前
原来公平锁和非公平锁差别这么大
java
渣哥16 分钟前
99% 的人没搞懂:Semaphore 到底是干啥的?
java
J2K25 分钟前
JDK都25了,你还没用过ZGC?那真得补补课了
java·jvm·后端
kfyty72528 分钟前
不依赖第三方,不销毁重建,loveqq 框架如何原生实现动态线程池?
java·架构
isysc12 小时前
面了一个校招生,竟然说我是老古董
java·后端·面试
道可到5 小时前
Java 反射现代实践速查表(JDK 11+/17+)
java
侃侃_天下5 小时前
最终的信号类
开发语言·c++·算法
道可到5 小时前
Java 反射现代实践指南(JDK 11+ / 17+ 适用)
java
玉衡子6 小时前
九、MySQL配置参数优化总结
java·mysql
叽哥6 小时前
Kotlin学习第 8 课:Kotlin 进阶特性:简化代码与提升效率
android·java·kotlin