一   Java中的锁是什么?

/*
* 一 Java锁定义?
* 在计算机科学中,锁(lock)或互斥(mutex)是一种同步机制,用于在有许多执行线程的环境中强制对资源的访问限制。
* 锁旨在强制实施互斥排他、并发控制策略。
*
* 锁的宏观分类?
* 乐观锁 和 悲观锁。
*
* 二 乐观锁?
* 即认为读多写少,遇到并发写的可能性低,每次去拿数据的时候都认为
别人不会修改,所以不会上锁。 版本号机制 和 CAS算法 来实现乐观锁。
但是在更新的时候会判断一下在此期间别人有没有去更新这个数
据,采取在写时 先读出【当前版本号】,然后加锁操作(比较跟上一次的版本号,如果一样则更新),
如果失败则要重复读-比较-写的操作 案例 银行卡 理想型 事物之间不干扰。 事件一 进账
本人银行卡,到月发工资。 此时版本号1
余额 0 , 到账1000, 结束。 整个过程只有新增的一条记录
完成后 版本号 + 1 此时版本号2 事件二 消费
银行卡支付账单,查询余额,此时版本号2
有1000 元 ,扣除消费金额10元
余额 990元 此时版本号3 事件之间互相干扰
事件一和二,同时开始。
版本号都从1开始
让事件一完成,此时的版本号是2
事件二开始,事件二会对版本号进行比较,此时版本号不一致。事件二就会失败。
然后重复读---比较----写的操作。 cas算法? 比较替换。
是一种更新的原子性操作,比较当前的值,和传入的值是否一致性。 一样则更新,否则失败。 CAS利用CPU指令【调用的是本地方法】,从硬件层面保证了操作的原子性,
原语的执行必须是连续的。不存在线程切换的问题。以达到类似于锁的效果。 无锁操作,不可能出现死锁情况。 cas(v,e,n) 想把v 修改成n ,需要v和e 进行比较,二者相同,才跟新变量v,然后把v的值给赋值给新值n。
v 需要更新的变量
e 预期值
n 新值 我们提供一个期望值 e ,当他和v 就是需要更新的变量是相等的。说明还没有线程修改该值。可以执行cas操作。
反之,期望值和需要更新的变量不相等。说明已经被其他线程修改。就不执行更新操作。
可以重新读取该变量,尝试再次修改,也可以放弃操作。 cas bba问题?
对应一个版本号,一个数据一个版本,值相等,版本号相等,才能修改。 三 悲观锁 Synchronized
悲观锁(Pessimistic Lock), 做最坏的打算来处理问题,每次去拿数据的时候都认为别人会修改。
所以每次在拿数据的时候都会上锁。这样别人想拿数据就被挡住,直到悲观锁被释放。 四 区别?
悲观锁阻塞事务,乐观锁回滚重试,
它们各有千秋,取决于实际使用场景。 像乐观锁适用于写比较少的情况下,冲突很少发生的时候,这样可以省去锁的开销,加大了系统的整个吞吐量。
但如果经常产生冲突,上层应用会不断的进行重试,这样反倒是降低了性能,所以这种情况下用悲观锁就比较合适。 *
*
*
*
*/

Java 锁 概念介绍的更多相关文章

  1. Java基础之(一)——从synchronized优化看Java锁概念

    一.悲观锁和乐观锁概念 悲观锁和乐观锁是一种广义的锁概念,Java中没有哪个Lock实现类就叫PessimisticLock或OptimisticLock,而是在数据并发情况下的两种不同处理策略. 针 ...

  2. Java锁概念基础

    Java中的锁不管是Lock还是synchronized都可以分为互斥锁和非互斥锁. 互斥锁只能被一个线程持有,其他线程只能等待锁的释放.synchronized,ReentrantLock,Read ...

  3. java 并发多线程 锁的分类概念介绍 多线程下篇(二)

    接下来对锁的概念再次进行深入的介绍 之前反复的提到锁,通常的理解就是,锁---互斥---同步---阻塞 其实这是常用的独占锁(排它锁)的概念,也是一种简单粗暴的解决方案 抗战电影中,经常出现为了阻止日 ...

  4. java中锁的概念/介绍

    前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8和Netty 3.10.6).使用场景进行举例,为读者介绍 ...

  5. java 并发多线程显式锁概念简介 什么是显式锁 多线程下篇(一)

    目前对于同步,仅仅介绍了一个关键字synchronized,可以用于保证线程同步的原子性.可见性.有序性 对于synchronized关键字,对于静态方法默认是以该类的class对象作为锁,对于实例方 ...

  6. java锁与监视器概念 为什么wait、notify、notifyAll定义在Object中 多线程中篇(九)

    在Java中,与线程通信相关的几个方法,是定义在Object中的,大家都知道Object是Java中所有类的超类 在Java中,所有的类都是Object,借助于一个统一的形式Object,显然在有些处 ...

  7. Java基础加强之并发(一)基本概念介绍

    基本概念介绍 进程:它是内存中的一段独立的空间,可以负责当前应用程序的运行.当前这个进程负责调度当前程序中的所有运行细节. 线程:它是位于进程中,负责当前进程中的某个具备独立运行资格的空间. 进程是负 ...

  8. java中的各种锁详细介绍

    转自:https://blog.csdn.net/axiaoboge/article/details/84335452 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高 ...

  9. Java SE/ME/EE的概念介绍

    转自 Java SE/ME/EE的概念介绍 多数编程语言都有预选编译好的类库以支持各种特定的功能,在Java中,类库以包(package)的形式提供,不同版本的Java提供不同的包,以面向特定的应用. ...

随机推荐

  1. 家用路由器也能充当Web服务器?路由器插件开发心得

    起因 最近刚刚结束考研,开始有时间写文章了.在复习的时候中,经常忍不住折腾各种东西,于是有一天看中了我手上的华为路由器.什么?华为路由器,你可能有这样的疑问,华为路由器不是自研的芯片吗,就像我手上这台 ...

  2. 第四十七个知识点:什么是Fiat-Shamir变换?

    第四十七个知识点:什么是Fiat-Shamir变换? 只要Alice和Bob同时在线,Sigma协议能快速的完成Alice向Bob证明的任务.Alice向Bob发送承诺,Bob返回一个挑战,最后Ali ...

  3. Golang项目的配置管理——Viper简易入门配置

    Golang项目的配置管理--Viper简易入门配置 What is Viper? From:https://github.com/spf13/viper Viper is a complete co ...

  4. JSP中的九大内置对象

    JSP九大内置对象 pageContext 存东西 Request 存东西 Response Session 存东西 Application(servletContext) 存东西 config(se ...

  5. 使用 IE 或Chrome等浏览器,通过网络抓包的形式,查看发送请求时的网络

    要求: 使用 IE 或Chrome等浏览器,通过网络抓包的形式,查看发送请求时的网络 实现步骤: 1.打开 IE 浏览器,选择"开发者工具",切换到"网络"标签 ...

  6. Eclipse 常用快捷键大全

    15 个 Eclipse 常用开发快捷键使用技巧 1.alt+? 或 alt+/:自动补全代码或者提示代码 2.ctrl+o:快速outline视图 3.ctrl+shift+r:打开资源列表 4.c ...

  7. JavaScript交互式网页设计 • 【第8章 jQuery动画与特效】

    全部章节   >>>> 本章目录 8.1 显示隐藏动画效果 8.1.1 show() 方法与hide() 方法 8.1.2 toggle()方法 8.1.3 实践练习 8.2 ...

  8. Hive安装Version2.1.0

    Hive安装,基于版本2.1.0, 使用apache-hive-2.1.0-bin.tar.gz安装包. 1.安装规划 角色规划 IP/机器名 安装软件 运行进程 hive zdh-9 hive Ru ...

  9. ubuntu18.04 安装谷歌chrome浏览器

    将下载源添加到系统源列表 # sudo wget http://www.linuxidc.com/files/repo/google-chrome.list -P /etc/apt/source.li ...

  10. 使用yum安装php*时报错的解决办法

    # yum -y install php* 注意: php53-odbc64-5.3.3-2.el5.x86_64 from base has depsolving problems  -->  ...