可重入锁

指的是在同一个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 somethinglock.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

锁-概念:可重入锁、可中断锁、公平锁、读写锁相关推荐

  1. java锁(公平锁和非公平锁、可重入锁(又名递归锁)、自旋锁、独占锁(写)/共享锁(读)/互斥锁、读写锁)

    前言 本文对Java的一些锁的概念和实现做个整理,涉及:公平锁和非公平锁.可重入锁(又名递归锁).自旋锁.独占锁(写)/共享锁(读)/互斥锁.读写锁 公平锁和非公平锁 概念 公平锁是指多个线程按照申请 ...

  2. 可重入锁和不可重入锁详解

    目录 概念: 通俗理解: 可重入锁的工作原理: ReenTrantLock可重入锁和synchronized的区别: ReentrantLock源码分析: 可重入锁代码演示: 概念: Reentran ...

  3. java可重入锁与不可重入锁

    所谓重入锁,指的是以线程为单位,当一个线程获取对象锁之后,这个线程可以再次获取本对象上的锁,而其他的线程是不可以的. synchronized 和   ReentrantLock 都是可重入锁. 可重 ...

  4. 乐观锁和悲观锁,可重入锁和不可重入锁(1)

    乐观锁和悲观锁,可重入锁和不可重入锁(1) 前言 感觉有一段时间没有写博客了呢.还是再接再厉吧,适当程度的总结能让我自己能够更加深入地巩固和理解自己所学习的一切. 还有,我很懒,而且我还是比较喜欢写日 ...

  5. Java锁之可重入锁和递归锁

    Java锁之可重入锁和递归锁 目录 Java锁之可重入锁和递归锁基本概念 Java锁之可重入锁和递归锁代码验证 小结 理论,代码,小结,学习三板斧. 1. Java锁之可重入锁和递归锁基本概念 可重入 ...

  6. java 共享锁 独占锁_java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁...

    一.公平锁与非公平锁 1.1 概述 公平锁:是指多个线程按照申请锁的顺序来获取锁. 非公平锁:是指在多线程获取锁的顺序并不是按照申请锁的顺序,有可能后申请的线程比先申请的线程优先获取到锁,在高并发的情 ...

  7. 对可重入锁和不可重入锁的理解

    可重入锁:ReentrantLock 在学JUC的时候,听到可重入锁这个词,不理解它的概念,网上搜索一番,还是有点迷糊,所以自己再来做一下笔记,理一理思路. 一.锁是什么? 我们这里提到的锁,是指把所 ...

  8. JUC - 多线程之悲观锁、乐观锁,读写锁(共享锁、独享锁),公平非公平锁,可重入锁,自旋锁,死锁(十)

    Java中主要有如下锁 一.悲观锁.乐观锁 悲观锁:当前线程去操作数据的时候,总是认为别的线程会去修改数据,所以每次操作数据的时候都会上锁,别的线程去操作数据的时候就会阻塞,比如synchronize ...

  9. Java中的锁机制 -- 乐观锁、悲观锁、自旋锁、可重入锁、读写锁、公平锁、非公平锁、共享锁、独占锁、重量级锁、轻量级锁、偏向锁、分段锁、互斥锁、同步锁、死锁、锁粗化、锁消除

    文章目录 1. Java中的锁机制 1.1 乐观锁 1.2 悲观锁 1.3 自旋锁 1.4 可重入锁(递归锁) 1.5 读写锁 1.6 公平锁 1.7 非公平锁 1.8 共享锁 1.9 独占锁 1.1 ...

  10. Java 中15种锁的介绍:公平锁,可重入锁,独享锁,互斥锁,乐观锁,分段锁,自旋锁等等...

    http://blog.51cto.com/13919357/2339446 Java 中15种锁的介绍 在读很多并发文章中,会提及各种各样锁如公平锁,乐观锁等等,这篇文章介绍各种锁的分类.介绍的内容 ...

最新文章

  1. 从源码中编译安装gmt官方开发版(优先体验最新功能)
  2. QT学习:认识QMainWindow
  3. Onedrive云盘程序——OneManager小白设置指南
  4. 10分钟让你学会使用Vuex
  5. PBRNet:Progressive Boundary Refinement Network for Temporal Action Detection (AAAI 2020)
  6. 1500页,40万字,阿里淘系技术2020技术年货来了!
  7. Sping AOP概述
  8. linux安装mysql菜鸟教程_Linux安装mysql教程
  9. 通过 Nginx 来实现禁止国外IP访问网站
  10. Windows下安全权限设置详解
  11. 一文揭开图机器学习的面纱,你确定不来看看吗
  12. 逆向unity3d手机游戏
  13. 不用U盘安卓Linux系统,安卓Android-X86 安装教程 不使用U盘安装Androidx86教程
  14. php反序列化漏洞中当不存在__invoke时的一种利用思路
  15. [敏捷开发培训] 燃尽图(Burndown Chart)
  16. 如何编辑图片上的文字?在线图片去字工具怎样使用?
  17. 前端埋点设计/小程序+友盟埋点方案
  18. DuerOS业绩亮眼,如何成为了百度财报新增长点?
  19. Adobe25年软件精华CS3中文版发布.
  20. 部署到linux 生成二维码失败

热门文章

  1. ruby操作常用数据库 - 使用DBI[翻译 转帖]
  2. Github访问慢的问题
  3. jmeter导出测试报告
  4. 微擎后台报错,关闭错误信息
  5. web.config中namespace的配置(针对页面中引用)
  6. Underscore.js (1.7.0)-集合(Collections)(25)
  7. Dev-Cpp 5.5.2 MinGW 4.7.2 写pthread C++ 多线程
  8. jQuery.unique引发一个血案
  9. hdu1533解题报告
  10. 日本新年传统习俗介绍(一)