随笔分类 -  并发编程

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