java内存模型和线程安全

1、原子性是指一个操作是不可中单的。即使是在多个线程一起执行的时候,一旦操作一开始,就不会被其他线程干扰。

Q1:i++是源自操作吗?--不是。

Q2:在32位的系统上对64位数据进行操作?--不是

Q3:在32位的系统上对32位数据进行操作?--是

 

2、有序性

在并发时,程序的执行可能就会出现乱序。

原因:

一条指令的执行时可以分为很多步骤的(汇编)

  --取值IF

  -- 译码和取寄存器操作数ID

  --执行或者有效地址计算EX

  --存储器访问MEM

  --写回WB

 

指令1:IF  ID  EX MEM WB

指令2:       IF  ID   EX   MEN WB

串行执行很浪费CPU资源

A=B+C的处理

LW:

LWR1B:             IF   ID   EX    MEM    WB

LWR2C:                   IF   ID     EX        MEM                             WB

ADDR3R1R2:              IF     ID          X(R2值还没拿到)      MEM     WB

SWA1R3:                                IF          X(R1还没计算好)      ID        EX     MEM   WB

 a=b+c

d=e-f

会进行重排序

 

3、可见性

1、硬件优化(如写吸收,批操作)

2、编译器优化(高速缓存)

 

posted @ 2017-08-14 23:05  zhidian  阅读(136)  评论(0编辑  收藏  举报