当前位置: 首页 > article >正文

Java面试篇基础部分-ReentrantLock详解

  ReentrantLock 是继承了Lock接口,并且实现了再接口中定义的方法,属于一个可重入的独占锁。ReentrantLock 通过自定义队列同步器(Abstract Queued Synchroinzed,AQS)来实现锁的获取与释放。
在这里插入图片描述
  那么什么是独占锁呢?独占锁就是指这个锁在同一时刻只能被一个线程所获取到,如果其他线程想要获取到这个锁,则只能在同步队列中等待;而锁的可重入是指同一个线程对同一个资源能够执行多次加锁操作。

  ReentrantLock 支持公平锁与非公平锁的实现。也就是说线程对于锁竞争的机制是相对公平的,而非公平是说,线程获取锁的机制是不公平的,这里有两个概念需要注意,一个是竞争机制,一个是获取机制。

  ReentrantLock 提供了Synchroinzed对锁的操作,还提供了例如可响应中断锁、可轮询锁请求、定时锁等方式来避免在操作过程中出现死锁。

ReentrantLock的用法

  ReentrantLock 对于锁的操作是有明显的操作过程,例如什么时候进行加锁、什么时候对锁进行释放。这些操作都是在开发者手中可以控制的。

public class ReenterLockDemo implements Runnable {
   

    // 定义一个 ReentrantLock 锁
    public static ReentrantLock lock = new ReentrantLock();

    public static int i =0;


    @Override
    public void run() {
   
        for (int j = 0; j < 10; j++) {
   
            lock.lock();//进行加锁操作
            // lock.lock(); //锁的可重入
            try{
   
                i++;
            }finally {
   
                lock.unlock();// 释放锁
                // lock.unlock();//可重入锁
            }
        }
    }

    public static void main(String[] args) throws InterruptedException {
   
        ReenterLockDemo reenterLockDemo = new ReenterLockDemo();
        Thread t1 = new Thread

http://www.kler.cn/a/317552.html

相关文章:

  • 软件工程师简历(精选篇)
  • ios swift开发--ios远程推送通知配置
  • Linux 系统管理和监控命令---- auditctl命令
  • 半导体企业如何利用 Jira 应对复杂商业变局?
  • ima.copilot-腾讯智能工作台
  • 【STM32】基于SPI协议读写SD,详解!
  • 应用密码学第一次作业(9.23)
  • 油耳朵怎么清理干净?双十一可视挖耳勺排行榜
  • Python注释
  • gitlab默认克隆地址的修改
  • react-native和原生android的交互
  • Mysql 架构
  • 武汉正向科技 格雷母线检测方式 :车检,地检
  • 78、Python之函数式编程:funcy,功能更加齐全的函数式编程库
  • 等位基因与碱基:异同点解析
  • MS SQL Server 实战 排查多列之间的值是否重复
  • 局域网中实现一对一视频聊天(附源码)
  • prober found high clock drift,Linux服务器时间不能自动同步,导致服务器时间漂移解决办法。
  • Maven的详细解读和配置
  • Linux 常用命令(待更新)
  • 安卓学习资源推荐
  • Java-数据结构-优先级队列(堆)-(二) (゚▽゚*)
  • Fyne ( go跨平台GUI )中文文档-绘图和动画(三)
  • 鸿蒙OpenHarmony【轻量系统内核通信机制(消息队列)】子系统开发
  • UDP Socket聊天室(Java)
  • Leetcode—329. 矩阵中的最长递增路径【困难】