风云办公ppt模板网站,优化软件刷排名seo,海南在线直播,软文推广渠道主要有1.Java内存模型
#xff08;1#xff09;Java 内存模型#xff08;Java Memory Model#xff0c;简称 JMM#xff09;#xff0c;它是一个抽象的概念#xff0c;JMM是和多线程相关的#xff0c;它是一组规范#xff0c;描述了一组规则#xff0c;定义了多线程对共享…1.Java内存模型
1Java 内存模型Java Memory Model简称 JMM它是一个抽象的概念JMM是和多线程相关的它是一组规范描述了一组规则定义了多线程对共享变量读写操作时的行为规范通过这些规则来规范对内存的读写操作从而保证多线程对共享数据操作的原子性、可见性以及有序性。 2同时通过这套规范屏蔽掉底层不同操作系统、不同 CPU 硬件之间的差异让 Java 程序员按照统一的方式来编程保证 Java 程序在各种平台下对内存的访问都能够得到相同的效果 3具体如下 ①所有的变量都存储在主内存中每个线程都可以访问 ②每条线程都有自己私有的工作内存 ③线程的工作内存中保存了该线程中用到的主内存变量的副本拷贝; ④线程对变量的所有操作都必须在工作内存中进行而不能直接操作主内存 ⑤不同线程之间也无法直接访问对方工作内存中的变量
2.volatile
1volatile关键字只能修饰类变量和实例变量对于方法参数、局部变量以及实例常量、类常量都不能进行修饰 2volatile 的主要作用是使共享变量在多线程间可见如果一个字段被声明成 volatileJava 线程内存模型会确保所有线程看到这个变量的值都是一致的 3volatile 可以保证可见性不能保证原子性volatile 也可以保证有序性
2.1 volatile 的使用场景
1在一些对变量的操作已经是原子性的情况下可以使用 volatile 关键字 2运行结果并不依赖变量的当前值可以使用 volatile 关键字volatile 不适合复合操 作像 i这种类型操作不适合使用 volatile int a10; a 20; 3一些状态标志的场景比如仅仅是使用一个布尔状态 true 和 false 标志 4定期更新供程序内部使用的变量可以使用 volatile 5双重检查锁定double-checked-locking问题可以用 volatile 注如果对共享变量已经加锁加锁本身已经保证了可见性、原子性、有序性此时就没必要再使用 volatitle