并发-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()
尝试加锁,如果失败,就继续执行下面的代码
相关推荐
Lee_SmallNorth几秒前
变态需求之【角色不同访问数据库的用户不同】
java·开发语言·数据库
扶苏-su2 分钟前
Java网络编程:InetAddress 详解
java·开发语言·网络
Anastasiozzzz14 分钟前
leetcode力扣hot100困难题--4.俩个正序数列的中位数
java·算法·leetcode·面试·职场和发展
木风小助理20 分钟前
JavaStreamAPI的性能审视,优雅语法背后的隐形成本与优化实践
java·前端·数据库
Chan1628 分钟前
《Java并发编程的艺术》| ConcurrentHashMap 在 JDK 1.7 与 1.8 的底层实现
java·spring boot·java-ee·intellij-idea·juc
IOT-Power1 小时前
QT构建构建DataBus总线
开发语言·qt
Ophelia(秃头版1 小时前
JS事件循环与NodeJS事件循环(libuv)
开发语言·javascript
米饭的白色1 小时前
matlab 中 `对数坐标` 画图下的 `hold on` 位置对坐标轴刻度的影响
开发语言·matlab
gjxDaniel1 小时前
Go编程语言入门与常见问题
开发语言·后端·go
计算机程序猿学长1 小时前
微信小程序毕设项目推荐-基于java+springboot+mysql+微信小程序的校园外卖点餐平台基于springboot+微信小程序的校园外卖直送平台【附源码+文档,调试定制服务】
java·微信小程序·课程设计