zoukankan      html  css  js  c++  java
  • 对线程的理解

    1.判断一段代码并发是否线程安全
    (1)先执行的代码先发生于后执行的代码(但这只针对于汇编代码,因为java编译器会进行指令重排序,
    不过,被synchrnized与volite修饰的代码块与变量不会被重排序,被volite修饰的变量就像一堵墙
    下面的代码无法排上去,上面的代码无法排下去)

    (2)一个unlock先于后一个lock操作(对于同一个对象)执行,反应到字节码就是monitorenter与monitorexit

    (3)Thread对象的start方法发生先于这个线程的所有代码

    (4)对象的构造方法先于它的finallize方法


    2.什么操作是原子的
    (1)read load use assign store write(Java内存规范定义的几种操作必须是原子的但64位的long与double
    不一定)
    read:把变量值从主存读到线程的工作内存中()
    load:把从主存中读到的变量值写入到工作内存的变量副本中
    use:把工作内存中的一个变量值交给执行引擎
    assign:用与把从执行引擎获取到的值赋给工作内存的变量,用于赋值操作
    store:把工作内存中的变量传给主内存中
    write:把从工作内存取到的值写入主内存

    (2)final定义的变量是原子的,因为在进行默认初始化的时候就会把显式赋值的值写入内存


    3.每个线程都会拷贝一个对象的方法副本,所以访问方法里的局部变量是很安全的
  • 相关阅读:
    2021-4-20 日报博客
    2021-4-19 日报博客
    2021-4-17 周报博客
    java web
    java web
    java web
    java
    java
    周末总结8
    java web
  • 原文地址:https://www.cnblogs.com/lollong/p/10659858.html
Copyright © 2011-2022 走看看