博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
锁-概念:可重入锁、可中断锁、公平锁、读写锁
阅读量:6592 次
发布时间:2019-06-24

本文共 1653 字,大约阅读时间需要 5 分钟。

可重入锁

指的是在同一个thread中,获取锁之后再次使用同样的方法或对象中的其他方法可以直接操作,而不需要重新获取锁。它是基于thread粒度的,per-thread。

不可重入锁

指的是每次使用锁方法时,都需要重新获取锁,即使在同一线程中调用同一方法都需要等待上一个锁的释放。它是基于method粒度的,per-invocation。

可重入锁与不可重复锁的例子

//设计一个锁public class Lock{    private boolean isLocked = false;    public synchronized void lock() throws InterruptedException{        while(isLocked){                wait();        }        isLocked = true;    }    public synchronized void unlock(){        isLocked = false;        notify();    }}// 不可重入锁public class Count{    Lock lock = new Lock();    public void print(){        lock.lock();        doAdd();        lock.unlock();    }    public void doAdd(){        lock.lock();        //do something        lock.unlock();    }}

以上就是一个不可重入锁。同一线程多次调用print()方法或则doAdd()方法都会阻塞。

// 可重入锁public class Lock{    boolean isLocked = false;    Thread  lockedBy = null;    int lockedCount = 0;    public synchronized void lock()            throws InterruptedException{        Thread thread = Thread.currentThread();        while(isLocked && lockedBy != thread){            wait();        }        isLocked = true;        lockedCount++;        lockedBy = thread;    }    public synchronized void unlock(){        if(Thread.currentThread() == this.lockedBy){            lockedCount--;            if(lockedCount == 0){                isLocked = false;                notify();            }        }    }}

以上就是一个可重入锁。只要是同一个thread获取对应的锁之后就可以重复的调用对应的方法,而不需要再次获取锁。

可中断锁

在等待获取锁过程中可中断。注意是在等待锁过程中才可以中断,如果已经获取了锁,中断就无效。

公平锁

按等待获取锁的线程的等待时间进行获取,等待时间长的具有优先获取锁权利。即按先后顺序来持有锁。

读写锁

对资源读取和写入的时候拆分为2部分处理,读的时候可以多线程一起读,写的时候必须同步地写。如:ReentrantReadWriteLock.

转载于:https://blog.51cto.com/881206524/2132462

你可能感兴趣的文章
龙龙背作文V1.0——考研英语作文专项训练软件
查看>>
得到一个数的立方
查看>>
推荐两个适合程序员接国外私单的网站
查看>>
洛谷 4384 [八省联考2018]制胡窜——后缀自动机+线段树合并
查看>>
ecshop 设置管理员
查看>>
算法14-----位运算操作(1)
查看>>
高效工作的经验总结
查看>>
Django实战(22):处理登录和注销
查看>>
use classic gnome 2 on ubuntu 12.10
查看>>
PAT1086 Tree Traversals Again (25)(树的遍历)
查看>>
并行计算 排序 是 分布式数据库 能否 突破 传统 数据库 性能 瓶颈 的 关键...
查看>>
OK335xS EMMC Partition hacking
查看>>
三角形面积 蓝桥杯
查看>>
vs2010 相对路径
查看>>
form的一个问题
查看>>
数据库操作
查看>>
samba介绍和安装
查看>>
利用JavaScript jQuery实现图片无限循环轮播(不借助于轮播插件)-----转载
查看>>
51nod 1179:最大的最大公约数
查看>>
函数的原型对象和原型链?
查看>>