zoukankan      html  css  js  c++  java
  • Java 关键字volatile的解释

    volatile 关键字特征:

    1.可见性,是指线程之间的可见性,一个线程修改的状态对另一个线程是可见的。可以禁止线程的工作内存对volatile修饰的变量进行缓存,并将修改的变量立即写入主存。

    2.确保有序性 Java 语言提供了 volatile 和 synchronized 两个关键字来保证线程之间操作的有序性,volatile 是因为其本身包含“禁止指令重排序”的语义。

    3.原子性:

      原子是世界上的最小单位,具有不可分割性。比如 a=0;(a非long和double类型) 这个操作是不可分割的,那么我们说这个操作时原子操作。再比如:a++; 这个操作实际是a = a + 1;是可分割的,所以他不是一个原子操作。非原子操作都会存在线程安全问题,需要我们使用同步技术(sychronized)来让它变成一个原子操作。

    4.线程不安全性:volatile变量在各个线程的工作内存中存在不一致性的问题,但是,在每次使用前都要刷新,所以执行引擎不会看到不一致的情况,所以认为不存在不一致性问题。以上两个规则,保证了可见性。

    ------------------------------------------------------------------------------------------------------------

    ReadWriteLock的作用:

    对象的方法中一旦加入synchronized修饰,则任何时刻只能有一个线程访问synchronized修饰的方法

    假设有个数据对象拥有写方法与读方法,多线程环境中要想保证数据的安全,需对该对象的读写方法都要加入 synchronized同步块。

    这样任何线程在写入时,其它线程无法读取与改变数据;如果有线程在读取时,其他线程也无法读取或写入。这种方式在写入操作远大于读操作时,问题不大,而当读取远远大于写入时,会造成性能瓶颈,因为此种情况下读取操作是可以同时进行的,而加锁操作限制了数据的并发读取。   ReadWriteLock解决了这个问题,当写操作时,其他线程无法读取或写入数据,而当读操作时,其它线程无法写入数据,但却可以读取数据 。

    -------------------------------------------------------------------------------------------------------------

    CopyOnWriteArraryList的作用:

    其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延时懒惰策略

    简单的理解就是:当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。

    这是一种读写分离的思想

    1.不能保证数据的实时一致性;

    2.适用于读多写少的场景(白名单,黑名单以及商品更新等场景)。

    ---------------------------------------------------------------------------------------------------------------------

    多线程一共有三种实现方式:
    方式1:继承Thread类,并重写run()方法
    方式2:实现Runnable接口,实现run()方法
    方式3:实现Callable接口,线程结束后可以有返回值,但是该方式是依赖于线程池的。
     
    ----------------------------------------------------------------------------------------------------------------------
    Java关键字:
     

     

    总结:

    1.基本类型:byte, char, double, int, long , short, float  (不包括String类型);

    2.异常和导入包:try, catch, finally, throw, throws, import, package(包);

    3.变量引用:super, this, void;

    4.程序控制:if, else, return, do, while, for, switch, case, default, break, instanceof;

    5.访问控制:private,public,protected;

    6.类,方法,变量修饰符:

    abstract 声明抽象
    class 类
    extends 扩允,继承
    final 终极,不可改变的
    implements实现
    interface 接口
    native 本地
    new 新,创建
    static 静态
    strictfp 严格,精准
    synchronized 线程,同步
    transient 短暂
    volatile 易失

  • 相关阅读:
    DrawSVG
    Cool!15个创意的 CSS3 文本效果【下篇】
    分享最新15个加速 Web 开发的框架和工具
    Unsplash.it
    Cool!15个超炫的 CSS3 文本特效【上篇】
    Codrops 实验:使用 Vibrant.js 提取图像颜色
    Javscript调用iframe框架页面中函数的方法
    竞争的残酷性暂时只体现在产业竞争上(老美有发达的制药、农业、军工、金融、航空、航天、石油、化工等产业,还有以芯片为代表的高端服务业)
    Qt元对象(Meta-Object)系统与反射
    安晓辉:程序员在公司没事干时候,做什么好?(产品上想多一点,设计上想多一点,技术上做深一点、做宽一点,思维框架上学多一点)
  • 原文地址:https://www.cnblogs.com/Lxiaojiang/p/6732138.html
Copyright © 2011-2022 走看看