| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Java 中的各种锁 学习笔记 -> 正文阅读 |
|
[Java知识库]Java 中的各种锁 学习笔记 |
线程安全问题先决条件当同时满足以下三个条件时,才可能引发线程安全问题。
并发编程的三个重要特性
什么是指令重排?Java允许
由于 JVM 具有指令重排的特性,执行顺序有可能变成 1->3->2。 使用 volatile 可以禁止 JVM 的指令重排,保证在多线程环境下也能正常运行。 java中的锁Java 各种锁的小结 在多线程编程中为了保障数据的一致性,我们通常需要在使用对象或者方法之前 1. synchronized关键字(使) 同步,在时间上一致,同速进行; 在 JDK 1.6 之前,synchronized 是重量级锁,效率低下。 特性:深入理解synchronized底层原理,一篇文章就够了! java中原子操作:
java中非原子操作:
2. 可见性 3.有序性 4. 可重入性 synchronized 关键字最主要的三种使用方式:类锁:使用 synchronized 修饰
构造方法可以使用 synchronized 关键字修饰么?构造方法本身就属于 2. volatile关键字:【美 /?vɑ?l?tl/ 】 背景知识:volatile 关键字 除了 说说 synchronized 关键字和 volatile 关键字的区别
java中锁的种类从乐观和悲观的角度可分为 乐观锁与悲观锁乐观锁总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据, 使用场景:乐观锁适用于 比如数据库提供的类似于write_condition机制,其实都是提供的乐观锁; 实现方式:用 1. 版本号机制一般是在数据表中加上一个数据版本号version字段,表示数据被修改的次数,当数据被修改时,version值会加1。当线程A要更新数据值时,在读取数据的同时也会读取version值,在提交更新时,若刚才读取到的version值为当前数据库中的version值相等时才更新,否则重试更新操作,直到更新成功。 2. CAS算法即 乐观锁的缺点
ABA问题指第1个线程从内存的V位置取出A,这时第2个线程也从内存中取出A,并将V位置的数据首先修改为B,接着又将V位置的数据修改为A,这时第1个线程在进行CAS操作时会发现在内存中仍然是A,然后第1个线程操作成功。尽管从第1个线程的角度来说,CAS操作是成功的,但在该过程中其实V位置的数据发生了变化,只是第1个线程没有感知到罢了,这在某些应用场景下可能出现过程数据不一致的问题。 2 循环时间长开销大 悲观锁总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会阻塞直到它拿到锁(共享资源每次只给一个线程使用,其它线程阻塞,用完后再把资源转让给其它线程) 使用场景:一般多写的场景下用悲观锁就比较合适 比如数据库的行锁,表锁等,读锁,写锁等,都是在做操作之前先上锁。Java中synchronized和ReentrantLock等独占锁就是悲观锁思想的实现。 CAS与synchronized的使用情景简单的来说CAS适用于写比较少的情况下(多读场景,冲突一般较少); |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 12:59:08- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |