并发-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()
尝试加锁,如果失败,就继续执行下面的代码
相关推荐
AI多Agent协作实战派13 分钟前
AI多Agent协作系统实战(十七):凌晨4点,我的AI系统在“假装工作“——3个bug同时爆炸的5小时
java·前端·bug
gaolei_eit20 分钟前
Java+Ai+vue
java·spring·maven
qq_25183645730 分钟前
基于java Web 动漫视频网站毕业论文
java·开发语言·前端
野生风长32 分钟前
C++入门基础:从命名空间到引用与指针的全面解析
开发语言·c++
LayZhangStrive35 分钟前
JUC相关的函数、注解、变量杂记
java·面试·多线程·juc
未秃头的程序猿40 分钟前
给公司做了个AI客服Agent,用的Spring AI 1.0,3天上线领导拍板了
java·后端·ai编程
曹牧44 分钟前
Eclipse 批量文本替换
java·ide·eclipse
FoldWinCard44 分钟前
D6 Python 基础语法 --- 保留关键字
开发语言·python
程序员清风1 小时前
OpenAI官方发布最新提示词技巧!
java·后端·面试
梅头脑1 小时前
写了3年CRUD,volatile和synchronized的区别还是答不清——直到我画出了这张三性两锁边界图
java