java中的悲观锁和乐观锁实现
摘要:悲观锁就是认为并发时一定会有冲突发生,采用互斥的策略。比如java中的synchronized。 而乐观锁是假设并发时不会有冲突发生,如果发生冲突,则操作失败,并不断重试。乐观锁的机制就是CAS(Compare and Swap)。 大多数的处理器都会实现一个CAS指令。 CAS包含了三个操作数,需
阅读全文
posted @
2017-07-10 14:34
知己一生
阅读(1496)
推荐(0)
java synchronized 的原理。
摘要:synchronized的作用大概分为三种: 1.确保多线程互斥的访问多线程代码。2.保证变量的可见性。3.防止指令重排序。 那么synchronized 是如何实现这些功能的。 以上面的Demo为例。对代码进行反编译。 结果如下: 关于monitorenter和monitorexit的作用,可以在
阅读全文
posted @
2017-07-05 16:42
知己一生
阅读(506)
推荐(0)
指令重排序
摘要:1.指令重排序是什么? 编译器或者运行时环境为了优化程序程序性能,可能会对指令进行重新排序。 例如: int a = 10; int b = 20; 计算机在执行如上语句时,可能会先执行第二句,再执行第一句。、 2.什么操作可能会被指令重排序? 并不是所有的操作都会被执行重排序,编译器或者处理器不会
阅读全文
posted @
2017-07-03 20:27
知己一生
阅读(208)
推荐(0)
java 锁的分类
摘要:java中为了解决多线程并发带来的线程安全问题,引入了锁机制。 一、公平锁和非公平锁 1、公平锁:按照申请锁的顺序(FIFO队列)来获取锁。 2、非公平锁:所有线程都会竞争,获取的锁的顺序和申请顺序无关。 二、共享锁和独占锁 1、共享锁:又称读锁,支持多个线程同时获取锁,可以读数据,无法更新。 2、
阅读全文
posted @
2017-05-03 11:50
知己一生
阅读(287)
推荐(0)