并发-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()
尝试加锁,如果失败,就继续执行下面的代码
相关推荐
dingdingfish2 分钟前
Bash学习 - 第3章:Basic Shell Features,第5节:Shell Expansions
开发语言·学习·bash
rainbow68893 分钟前
C++开源库dxflib解析DXF文件实战
开发语言·c++·开源
不倒翁玩偶3 分钟前
IDEA导入新的SpringBoot项目没有启动按钮
java·spring boot·intellij-idea
deepxuan4 分钟前
Day7--python
开发语言·python
小小小米粒18 分钟前
Maven Tools
java
禹凕19 分钟前
Python编程——进阶知识(多线程)
开发语言·爬虫·python
蜡笔小马32 分钟前
10.Boost.Geometry R-tree 空间索引详解
开发语言·c++·算法·r-tree
IOsetting32 分钟前
金山云主机添加开机路由
运维·服务器·开发语言·网络·php
kali-Myon33 分钟前
2025春秋杯网络安全联赛冬季赛-day1
java·sql·安全·web安全·ai·php·web
我是咸鱼不闲呀36 分钟前
力扣Hot100系列20(Java)——[动态规划]总结(下)( 单词拆分,最大递增子序列,乘积最大子数组 ,分割等和子集,最长有效括号)
java·leetcode·动态规划