摘要: 1、什么悲观锁? 顾名思义,悲观锁是基于一种悲观的态度类来防止一切数据冲突,它是以一种预防的姿态在修改数据之前把数据锁住,然后再对数据进行读写,在它释放锁之前任何人都不能对其数据进行操作,直到前面一个人把锁释放后下一个人数据加锁才可对数据进行加锁,然后才可以对数据进行操作,一般数据库本身锁的机制都是 阅读全文
posted @ 2022-04-01 21:16 飞翔的小鸟er 阅读(295) 评论(0) 推荐(0)
摘要: synchronized关键字会让没获得锁资源的线程进入BLOCKED(阻塞)状态,只有在争夺到锁资源的时候才转换成RUNNABLE(运行)状态。这其中涉及到操作系统中用户模式和内核模式之间的切换,代价比较高。 同时,尽管jdk对synchronized关键字进行了优化,增加了从偏向锁到轻量级锁再到 阅读全文
posted @ 2022-04-01 21:06 飞翔的小鸟er 阅读(167) 评论(0) 推荐(0)
摘要: synchronized版本是同一个锁,lock版本是两个不同的锁 这里说错了,这就是一把锁,锁的就是ReentrantLock这个对象,ReenTrantLock中有AQS,AQS可以判断两次lock方法都是同一个线程,这才是可重入锁 synchronized和lock的区别 可以注意一下,老师这 阅读全文
posted @ 2022-04-01 16:14 飞翔的小鸟er 阅读(92) 评论(0) 推荐(0)
摘要: 乐观锁是一种思想,就是数据更新的时候检测是否产生并发冲突。CAS是具体的实现 乐观锁的实现方式: CAS和版本号机制 乐观锁是一种锁类型,cas是乐观锁的一种具体实现方式 2. 由于new的时候声明泛型肯定是装箱类,这个时候传入值类型将会自动装箱 4. 总结:最好不使用原子类型,使用原子类型得保证比 阅读全文
posted @ 2022-04-01 11:35 飞翔的小鸟er 阅读(47) 评论(0) 推荐(0)
摘要: 加个延时更容易看出问题 单反射+单例 三重检测 双反射 四重检测 变量加密 变量破坏 道高一尺魔高一丈 继续破解枚举模式 反射不能破坏枚举的单例 工作就写饿汉式 准没错 阅读全文
posted @ 2022-04-01 10:15 飞翔的小鸟er 阅读(81) 评论(0) 推荐(0)
摘要: 1、这不是指令重排,是线程调度问题,指令重排是这样的: 8、之后只要线程2的 y=a 在线程1的a=1操作前执行完就行 3、之后创建两个线程进行操作:左边为线程1,右边为线程2 内存屏障在单例模式使用频率最高 阅读全文
posted @ 2022-04-01 09:52 飞翔的小鸟er 阅读(352) 评论(0) 推荐(0)
摘要: Java内存模型 保证在多线程环境下变量的相互可见性与有序性,不保证原子性 保证可见性:当某个线程修改volatile变量时,JMM会强制将这个修改更新到主内存中,并且让其他线程工作内存中存储的副本失效。 确实store在前,write在后 store与write反了,先store后write st 阅读全文
posted @ 2022-04-01 09:43 飞翔的小鸟er 阅读(154) 评论(0) 推荐(0)