自学内容网 自学内容网

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

原文地址:https://blog.csdn.net/nihui123/article/details/142410566

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!