锁
文章平均质量分 68
有趣的难受
你对这个世界有多大的认知,就决定你能挣多少钱。
展开
-
cas 面试题
1、cas 是机器里面那个关键字unsafe c++ 写的 comxchg2、cas java 的实现atomic 包下3、是什么锁乐观锁4、aba 问题解决CAS可以有效的提升并发的效率,但同时也会引入ABA问题。如线程1从内存X中取出A,这时候另一个线程2也从内存X中取出A,并且线程2进行了一些操作将内存X中的值变成了B,然后线程2又将内存X中的数据变成A,这时候线程1进行CAS操作发现内存X中仍然是A,然后线程1操作成功。虽然线程1的CAS操作成功,但是整个过程就是有问题的。比如链原创 2021-10-13 16:57:43 · 559 阅读 · 0 评论 -
synchronized
synchronized锁在单线程下生效吗虽然有锁升级 但是也会生效多个线程持有对象监视器作为同一个对象的前提下,同一时间只有一个线程可以执行synchronized(任意自定义对象)同步代码快。监听锁 monitor 一个对象只有唯一的一个。synchronized 关键字使用的是对象监视器原理作为同步synchronized实现同步的基础:普通同步方法,锁是当前实例对象静态同步...原创 2019-02-21 10:47:01 · 313 阅读 · 1 评论 -
volatile
volatile变量是一种稍弱的同步机制在访问volatile变量时不会执行加锁操作,因此也就不会使执行线程阻塞,因此volatile变量是一种比synchronized关键字更轻量级的同步机制。读取快 修改慢1.volatile保证可见性1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。2)禁止进行指令重排序。编译出来的只...原创 2019-02-21 10:19:04 · 224 阅读 · 0 评论 -
ReentrantLock
ReentrantLock 概念ReentrantLock 来自java.util.concurrent 包除了Synchronized 外,ReentrantLock 同样可以实现同步机制。Synchronized为API层面的互斥锁(lock0)和unlock()方法配合tryfinally语句块来完成)ReentrantLock为原生语法层面的互斥锁。ReentrantLock 是...原创 2019-02-26 12:25:49 · 176 阅读 · 0 评论 -
锁简介和锁升级
jvm 对象头里面记录锁锁的等级 无锁 偏向锁 轻量级 重量级乐观锁 采用的方案cas重量级 synchronized普通同步方法,锁对象静态同步方法,锁class同步方法块,锁括号里面的对象同步一个类,锁是synchronized后面括号括起来的部分,锁class轻量级 volatile内存可见禁止指令重排运算结果并不依赖变量的当前值可以修改或者能够确保只有单一的...原创 2019-07-23 23:20:09 · 193 阅读 · 0 评论 -
分布式锁的应用
mysql zk redismsql 加锁就是新增数据 解锁就是删除数据redis 分布式锁什么环境使用分布式锁jdk 中的锁只能解决一个进程多线程的锁 jvm锁思路应用场景有缺点redis 单进程 单线程分布式锁 用在1多进程2进行同一个数据读写信息3 操作数据互斥加锁通过setnx 向特定的key写入一个随机值,并同时是设置失效时间,写值成功既加锁成功注意点必...原创 2019-07-24 11:25:08 · 121 阅读 · 0 评论 -
java 内存模型和volatile 主内存理解
Java内存模型概述Java内存模型(即Java Memory Model,简称JMM)本身是一种抽象的概念,并不真实存在,它描述的是一组规则或规范,通过这组规范定义了程序中各个变量(包括实例字段,静态字段和构成数组对象的元素)的访问方式。由于JVM运行程序的实体是线程,而每个线程创建时JVM都会为其创建一个工作内存(有些地方称为栈空间),用于存储线程私有的数据,而Java内存模型中规定所有变量...原创 2019-08-02 17:08:30 · 226 阅读 · 0 评论