并发-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()
尝试加锁,如果失败,就继续执行下面的代码
相关推荐
学IT的周星星2 分钟前
Maven 项目和 Maven Web 项目的异同点
java·maven
摇滚侠2 分钟前
Spring Boot3零基础教程,函数式 Web 新特性,笔记51
java·spring boot·笔记
mustfeng4 分钟前
VCS & Verdi 2023安装
java·服务器·前端
Geoffrey5 分钟前
maven中的pom详述
java
练习时长一年7 分钟前
jdk动态代理实现
java·开发语言
爬山算法8 分钟前
Redis(83)Redis的缓存击穿是什么?
java·redis·缓存
Elieal12 分钟前
IDEA使用教程
java·ide·intellij-idea
moringlightyn19 分钟前
c++ 智能指针
开发语言·c++·笔记·c++11·指针·智能指针
执笔论英雄22 分钟前
【大模型推理】ScheduleBatch 学习
java·spring boot·学习
CRMEB系统商城31 分钟前
【新版发布】标准版PHP v5.6.4正式版,优化部分用户体验
java·大数据·小程序·php·ux