显示锁

原本打算写设计模式的,在周六日用了两天的时间所有看了一遍,可是写了一篇以后,发现,写的没有网上的好,感受你们可能看不懂,因此打算继续写并发编程html

设计模式,就给你们推荐一下菜鸟教程的吧,我看了一下,将的比较统一,都很不错java

连接:https://www.runoob.com/design-pattern/design-pattern-tutorial.html编程

显示锁:

  显示锁是jdk1.5以后提供的一种锁设计模式

  Lock提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操做,全部加锁和解锁的方法都是显示的。网络

  ReentrantLock实现了Lock接口,并提供了与synchronized相同的互斥性和内存可见性。又称为可重入锁。

Lock接口:

 

 

 lock:加锁并发

lockInterruptibly:中断锁spa

tryLock:尝试获取锁,附带超时重载线程

unlock:释放锁设计

newCondition:获取一个Condition,Condition是一个用于线程之间通讯的一个类code

package org.dance.day4;

import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * lockDemo
 * @author ZYGisComputer
 */
public class LockDemo {

    private Lock lock = new ReentrantLock();

    private int count;

    /**
     * 累加操做
     */
    public void increment(){
        // 加锁
        lock.lock();
        try {
            count++;
        }finally {
            // 释放锁
            lock.unlock();
        }
    }

    public synchronized void incrementSync(){
        count++;
        // 可重入锁演示
        incrementSync();
    }

}

Lock使用三范式:

1:获取锁

2:写try finally

3:在finally中释放锁

总结:获取锁完毕后,必定要在以后的代码中,添加try finally并在finally块中释放锁,由于防止代码中抛出异常报错,致使锁没法释放

Lock接口和 Synchronized比较:

            Lock  Sync

使用方式        复杂  简单

获取锁是否能够被中断  能够  不能够

获取锁是否能够超时   能够  不能够

是否能够尝试获取锁   能够  不能够

是否可重入       能够  能够

是否能够读写分离    能够  不能够

是不是阻塞的      不是  是

可重入锁:

  什么是可重入锁?可重入锁就是支持一个线程对这个锁进行屡次获取加锁,通常只有在递归一个加锁的方法的时候或者调用多个加锁的方法才会用到可重入锁,可重入锁获取了几回,就要释放几回,而Java的Synchronized和Lock接口都是提供锁的可重入的.

使用:

  通常来讲,若是不是,业务特殊要求锁,须要能够中断,或者获取超时,或者尝试获取,读写分离的,推荐直接使用Synchronized

做者:彼岸舞

时间:2020\11\02

内容关于:并发编程

本文来源于网络,只作技术分享,一律不负任何责任

相关文章
相关标签/搜索