2020年3月5日

Java 中的 CAS 操作

摘要: 在JDK 5之后,Java类库中才开始使用CAS操作,该操作由sun.misc.Unsafe类里面的compareAndSwapInt()和compareAndSwapLong()等几个方法包装提供。HotSpot虚拟机在内部对这些方法做了特殊处理,即时编译出来的结果就是一条平台相关的处理器CAS指 阅读全文

posted @ 2020-03-05 15:56 cag2050 阅读(956) 评论(0) 推荐(0) 编辑

ReentrantLock 与 synchronized 的比较

摘要: 重入锁(ReentrantLock)是Lock接口最常见的一种实现[插图],顾名思义,它与synchronized一样是可重入[插图]的。在基本用法上,ReentrantLock也与synchronized很相似,只是代码写法上稍有区别而已。不过,ReentrantLock与synchronized 阅读全文

posted @ 2020-03-05 15:41 cag2050 阅读(675) 评论(0) 推荐(0) 编辑

线程安全的实现方法:互斥同步、非阻塞同步、无同步方案

摘要: 互斥同步(也称为阻塞同步,属于一种悲观的并发策略) 互斥同步,可以用:synchronized、J.U.C包中的锁 非阻塞同步(基于冲突检测的乐观并发策略,使用了硬件指令集提供的CAS功能) 非阻塞同步,可以用:J.U.C包里面的整数原子类 无同步方案 无同步方案,可以用:可重入代码(类似于纯函数) 阅读全文

posted @ 2020-03-05 15:36 cag2050 阅读(608) 评论(0) 推荐(0) 编辑

J.U.C包的意义

摘要: 从上面的介绍中我们可以看到synchronized的局限性,除了synchronized关键字以外,自JDK 5起(实现了JSR166[插图]),Java类库中新提供了java.util.concurrent包(下文称J.U.C包),其中的java.util.concurrent.locks.Loc 阅读全文

posted @ 2020-03-05 15:14 cag2050 阅读(132) 评论(0) 推荐(0) 编辑

synchronized 原理

摘要: 在Java里面,最基本的互斥同步手段就是synchronized关键字,这是一种块结构(Block Structured)的同步语法。synchronized关键字经过Javac编译之后,会在同步块的前后分别形成monitorenter和monitorexit这两个字节码指令。这两个字节码指令都需要 阅读全文

posted @ 2020-03-05 15:08 cag2050 阅读(184) 评论(0) 推荐(0) 编辑

什么场景下,使用 final、volatile、Atomic原子类、synchronized、J.U.C 包中的锁?

摘要: 使用原则 满足使用条件的情况下,按先后顺序优先使用:final、volatile、Atomic原子类、synchronized、J.U.C 包中的锁 使用 final 的场景 final关键字的可见性是指:被final修饰的字段在构造器中一旦被初始化完成,并且构造器没有把“this”的引用传递出去( 阅读全文

posted @ 2020-03-05 11:33 cag2050 阅读(338) 评论(0) 推荐(0) 编辑

导航