一、对Java内存模型(JMM)
Java内存模型(Java Memory Model,JMM)是一种抽象的模型,被定义出来屏蔽各种硬件和操作系统的内存访问差异。
JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(Main Memory)中,每个线程都有一个私有的本地内存(Local Memory),本地内存中存储了该线程以读写共享变量的副本。
Java内存模型抽象图:
本地内存JMM是一个抽象概念,并不真实存在。涵盖了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化。
图里面的是一个双核 CPU 系统架构 ,每个核有自己的控制器和运算器,其中控制器包含一组寄存器和操作控制器,运算器执行算术逻辅运算。每个核都有自己的一级缓存,在有些架构里面还有一个所有 CPU 共享的二级缓存。 那么 Java 内存模型里面的工作内存,就对应这里的 Ll 缓存或者 L2 缓存或者 CPU 寄存器。
二、原子性、可见性、有序性
原子性、有序性、可见性是并发编程中非常重要的基础概念
2.1 原子性
原子性指的是一个操作不可以被分割、不可中断,要么全部执行并且执行得过程不会被任何因素打断,要么就全不执行。
分析下面几行代码的原子性:
(1)int i = 2;
(2)int j = i;
(3)i++;
(4)i = i + 1;
第一句是基本类型赋值,是原子操作。
第二句先读i的值,再赋值到j,两服务器托管网步操作不能保证原子性。
第三句和第四句是等效的,先读取i的值,再+1,最后赋值到i,三步操作不能保证原子性。
2.2 可见性
可见性指的是一个线程修改了某一个共享变量的值时,其它线程能够立即知道这个修改。
2.3 有序性
有序性指的是对于一个线程的执行代码,从前往后依次执行,单线程下可以任务程序是有序的,但是并发时有可能会发生指令重排。
2.4应该怎么保证原子性、可见性和有序性
原子性:JMM智能保证基本的原子性,如果要保证一个代码块的原子性,需要使用synchronized。
可见性:Java是利用volatil服务器托管网e关键字来保证可见性,除此之外,final和synchronized也能保证可见性。
有序性:synchronized或者volatile都可以保证多线程之间操作的有序性。
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
目录 需求一:在不同设备上使用不同 UI 外观 定义控件 UI 外观 基于平台自定义配置 需求二:在不同数据类别中使用不同的 UI 外观 定义视图 UI 外观 创建数据模板 创建选择器 定义数据 需求三:在不同数据状态中使用不同的 UI 外观 使用绑定模型更改…