Java中实现锁的方式有多种,并且锁的分类也有很多,这篇文章会从锁分类方面简单介绍各分类的锁的特点。

悲观锁和乐观锁

  悲观锁:先假设别人也会对数据就行修改,所以先获得锁再进行操作。一个县城在获得锁之后其他线程只能等待。synchronize就是悲观锁

   乐观锁:先假设没有其他线程会修改这个数据,不加锁,如果自己有修改操作,在提交修改的数据之前会先比较:主存中现在此数据的值a,自己所保存的此数据的copy副本b,新值c,如果a和b的值一样,说明没有其他线程修改此数据,可以正常提交;如果a和b的值不一样,说明有其他线程修改了此数据,禁止提交重新执行程序。lock就是乐观锁。

公平锁和非公平锁

  公平锁:先请求锁的线程先获得锁,也就是先到先得。

  非公平锁:无论是不是先请求锁,锁的分配都是随机的,也就是先到的不一定会先得到锁。

重入锁

  重入锁:一个线程可以多次获得锁,但是释放锁的机制不太一样。synchronized就是重入锁,它是在其作用代码块的入口开始获得锁,代码执行完毕会立马释放锁。ReentrantLock也是可重入锁,但是线程可以对此锁进行多次获取,然后再集中释放,释放次数一定要等于获取次数,如果释放少了会影响其他线程对此锁的获取,如果释放多了会抛出异常。

独享锁和共享锁

  独享所:指该锁一次只能被一个县城所持有。synchronized和ReentrantLock都是独享锁。

  共享锁:指该锁一次可以被多个线程持有。ReadWriteLock中的读锁是共享锁,写锁是独享锁。

互斥锁和读写锁

  其实上面提到的独享锁和共享锁只是广义上的概念。具体的变现就是现在要说的互斥锁和读写锁。

  互斥锁:在Java中的具体表现就是ReenTrantLock,Synchronized

  读写锁:在Java中的具体表现就是ReadWriteLock。

分段锁

  分段锁:分段锁其实是一种锁的设计并不是一种类型的锁。

偏向锁,轻量级锁,重量级锁

自旋锁

Java基础知识之锁的更多相关文章

  1. Java基础知识回顾之七 ----- 总结篇

    前言 在之前Java基础知识回顾中,我们回顾了基础数据类型.修饰符和String.三大特性.集合.多线程和IO.本篇文章则对之前学过的知识进行总结.除了简单的复习之外,还会增加一些相应的理解. 基础数 ...

  2. Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  3. 毕向东—Java基础知识总结(超级经典)

    Java基础知识总结(超级经典) 写代码: 1,明确需求.我要做什么? 2,分析思路.我要怎么做?1,2,3. 3,确定步骤.每一个思路部分用到哪些语句,方法,和对象. 4,代码实现.用具体的java ...

  4. java基础知识-笔记整理

    1.查看已安装jdk文件路径 CMD输入java -verbose.   2.java学习提升路线 java学习视屏地址: http://www.icoolxue.com/album/show/38 ...

  5. 沉淀,再出发:Java基础知识汇总

    沉淀,再出发:Java基础知识汇总 一.前言 不管走得多远,基础知识是最重要的,这些知识就是建造一座座高楼大厦的基石和钢筋水泥.对于Java这门包含了编程方方面面的语言,有着太多的基础知识了,从最初的 ...

  6. Java基础知识强化之集合框架笔记76:ConcurrentHashMap之 ConcurrentHashMap简介

    1. ConcurrentHashMap简介: ConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和Hashtable功能相同但是线程安全的方法.Conc ...

  7. java基础知识精华

    转载:https://www.jianshu.com/p/6c078abb720f java基础知识 java内存模型 java运行时数据区域 hashMap 如何解决冲突 存储方式 冲突达到一定数量 ...

  8. Java基础知识常识总结

    Java基础知识常识总结 1.面向对象的特征以及对他的理解? 封装,继承,多态,如果再增加一条就是抽象. 2.Object有几种方法,分别是什么? 在JDK1.5中的11种方法,分别有: toStri ...

  9. java基础知识一览(二)

    一.java基础知识 1.一个文件中只能有一个public的类,因为他的类名要求和文件名相同. 2.classpath变量可以设置其它目录下的类. 例如:类文件所在目录是:F:\Javajdk,那么没 ...

随机推荐

  1. java框架篇---Struts2 本地化/国际化(i18n)

    国际化(i18n)是规划和实施的产品和服务,使他们能很容易地适应特定的本地语言和文化的过程中,这个过程被称为本地化.国际化的过程有时也被称为翻译或本地化启用.国际化是缩写i18n,因为我和两端用n字打 ...

  2. 【WPF】图片按钮的单击与双击事件

    需求:ListBox中的Item是按钮图片,要求单击和双击时触发不同的事件. XAML中需要引入System.Windows.Interactivity.dll xmlns:i="clr-n ...

  3. ABBYY PDF Transformer+系统要求

    ABBYY PDF Transformer+是一个新的,全面的巧妙解决PDF文档的工具,它将泰比的光学字符识别(OCR)技术和Adobe®PDF技术完美结合,以确保实现便捷地处理任何类型的PDF文件, ...

  4. python中利用redis构建任务队列(queue)

    Python中的使用标准queue模块就可以建立多进程使用的队列,但是使用redis和redis-queue(rq)模块使这一操作更加简单. Part 1. 比如首先我们使用队列来简单的储存数据:我们 ...

  5. [PyData] 02 - Data Preprocessing and Cleaning

    From: DBWangGroup 基于该系列代码的实践与补充思考. 补充:特征工程 http://www.cnblogs.com/jasonfreak/category/823064.html  & ...

  6. Nuxt.js项目实战

    感悟 经过几个周六周日的尝试,终于解决了服务端渲染中的常见问题,当SEO不在是问题的时候,或许才是我们搞前端的真正的春天,其中也遇到了一些小坑,Nuxt.js官方还是很给力的,提issue后很积极的给 ...

  7. js中的构造函数

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. Qt编写通用主界面V2019

    其实是2018年做出来的这个界面效果,用该界面做了三四个项目,今天抽空特意提取出来单独的demo,集成到了皮肤生成器中.

  9. web开发之环境配置和文件系统

    web开发中有jsp,html,css,java,pictures等文件和程序,怎么组织他们,使其正确加载,是一个比较大的问题,就像一团乱麻,解不开啊.IDE是个大管家,要对它非常熟悉才可以,跟顺利地 ...

  10. 10.16 正式开发stark组件(一)

    2018-10-16 17:26:44 Django MTV  路由配置里面有 反向解析 参考连接:https://www.cnblogs.com/yuanchenqi/articles/762993 ...