• 《深入理解Java虚拟机》并发(第12~13章)笔记


    volatile关键字的作用

    1. 所有变量的可见性——仅仅是修改后的值的可见性,不保证并发修改时新值和预期一致。即只保证读,不保证写。
    2. 禁止指令重排序——修饰的变量,读写不会指令重排。如变量isReady被volatile修饰,这两条指令int B = 0isReady=true不会在编译时改变顺序。注意这里是机器级代码的重排序。

    多线程的实现

    JDK基于具体系统来做的,如内核线程、用户线程、用户线程加轻量进程混合等。

    不可变

    初始化后就不会改变

    • final修饰
    • String
    • java.lang.Number的部分子类如Long、Double,AtomicInteger和AtomicLong除外

    线程安全

    如Vector这样的容器,虽然get()、size()、add()等有synchronized关键字,但是实际使用时还是需要额外的同步(可以是针对容器对象本身的synchronized)保障。
    原因是,Vector的线程安全,指的是其对应方法不可打断。但是在多线程环境下,多个方法按顺序执行时,仍有可能产生非预期的行为。
    举例:对于非空Vector,记为v,多个线程同时执行remove(v.size()-1),有可能发生数组越界。

    逃逸分析

    (实际是第11章的内容)
    运行期优化,判断一个对象是否会逃逸到方法外或其他线程。如果不会逃逸,对应的优化手段:

    • 栈上分配,在栈上分配这个对象
    • 同步消除,去掉这个对象多线程下的同步措施
    • 标量替换,将这个对象拆分成标量(基本数据类型、referrence等)来创建而不是创建这个对象。
  • 相关阅读:
    Bootstrap (Web前端CSS框架)
    面向对象和构造函数
    BFC(块级格式化上下文)
    图片轮播
    yii 计划任务
    Yii-数据模型- rules类验证器方法详解
    ubuntu下svn使用指南
    PHP加密解密函数
    在 PHP 中结合 Ajax 技术进行图片上传
    CSS3常用功能的写法
  • 原文地址:https://www.cnblogs.com/wuyuegb2312/p/11925529.html
Copyright © 2020-2023  润新知