美文网首页
java无锁

java无锁

作者: 778bc750a218 | 来源:发表于2019-09-26 14:08 被阅读0次

原子性 :

    即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行

可见性:

    可见性是指当多个线程访问同一个变量时,一个线程修改了这个变量的值,其他线程能够立即看得到修改的值。

有序性:

   即程序执行的顺序按照代码的先后顺序执行。

volatile:

    volatile可以保证线程可见性且提供了一定的有序性,但是无法保证原子性。在JVM底层volatile是采用“内存屏障”来实现的。

    1.保证可见性

    2.不保证原子性

    3.禁止指令重排序


1.AtomicInteger    

final int get()        //去的当前值

final void set( int newValue )        //设置当前值

final int getAndSet( int newValue )        //设置新值,并返回旧值

final boolean compareAndSet( int expect, int u )                   //如果当前值为expect,则设置为u

final int getAndIncrement()                   //当前值加1,返回旧值

final int getAndDecrement()                   //当前值减1,返回旧值

final int getAndAdd( int delta )                //当前值增加delta,返回旧值

final int IncremenAndGet()                //当前值加1,返回新值

final int decremenAndGet()                //当前值减1,返回新值

final int addAndGet( int delta)                //当前值增加delta,返回新值

2.Unsafe(不推荐使用,不同jdk实现方法不一样)

3.AtomicReference

    对引用进行修改

    是一个模板类,抽象化数据类型

    主要有get、set 、compareAndSet、getAndSet方法还有layzeSet、weakCompareAndSet

4.AtomicStampedReference

    带有邮戳(注:时间戳等,能够标识唯一性的,且有序的数据)的的引用修改类。

    应用场景如:多线程写操作时对于数据敏感情况下,监听某一数值条件并进行有限次写操作的情况下,需要对数据当前引用对象进行时间判断是否,这里注意不能用compareAndSet虽然值可能相同,但是我们进行的是有限次写操作,读操作获得值的时间可能在AtomicReference.compareAndSet时取得是值是相同,但对象可能已经被其他线程修改但与当前值相等。所以需要AtomicStampedReference;

5.AtomicIntegerArray、ReferenceArray、LongArray

6.AtomicIntegerFieldUpdater

    让普通变量也享受原子操作

    方法:

    <U>    AtomicIntegerFieldUpdater.newUpdater( Class<U> tclass , String fieldName);

    注:普通变量需要加上volatile

    


相关文章

  • 2020-09-27

    Java 高并发之无锁(CAS) 本篇主要讲 Java中的无锁 CAS ,无锁 顾名思义就是 以不上锁的方式解决并...

  • java无锁

    原子性 : 即一个操作或者多个操作 要么全部执行并且执行的过程不会被任何因素打断,要么就都不执行 可见性: 可...

  • 一文读懂 Java 中的原子类

    一、无锁方案 Java 并发包中的原子类都是基于无锁方案实现的,相较于传统的互斥锁,无锁并没有加锁、解锁、线程切换...

  • Java主流锁体系+ Synchronized底层原理+ AQS

    Java主流锁体系全面认识:1、乐观锁,悲观锁2、读锁(共亨锁),写锁(排它锁)3、自旋锁,非自旋锁4、无锁,偏向...

  • java 锁升级

    java锁升级路线 偏向锁->轻量级锁->重量级锁(互斥量) 1: 正常无锁状态 轻量级锁未锁定状态 偏向锁未锁...

  • Android锁的实现

    锁的对比 java中的锁一共有4种状态,级别从低到高分别是: 无锁状态 偏向锁 轻量级锁 重量级锁 锁只能升级,不...

  • 多线程与高并发知识点简述

    CAS和Atomic包 CAS操作流程: JDK5之后发布了基于乐观锁思想的自旋锁(无锁)java.util.co...

  • java锁机制

     java中每个对象都可作为锁,锁有四种级别,按照量级从轻到重分为:无锁、偏向锁、轻量级锁、重量级锁。每个对象一开...

  • 锁的四种状态

    锁的四种状态 Java锁的四种状态分别是无锁、偏向锁、轻量级锁、重量级锁。 为什么要有锁的四种状态 JDK 1.6...

  • JAVA:最好的锁是无锁

    关于synchronized 众所周知,JAVA中最简单的加锁方法是用关键字synchronized,我们可以使用...

网友评论

      本文标题:java无锁

      本文链接:https://www.haomeiwen.com/subject/aofwuctx.html