12、JAVA内存模型与线程
一、JMM
有序性,可见性,原子性
synchorize :3个性都有;
volatile:保证可见性+禁止指令重排;
二、线程的五种状态
面向过程与面向对象的差别
面向过程:站在计算机的角度分析和解决问题,把问题分解成数据+程序两个独立的单元;
面向对象:站在现实的角度分析和解决问题,把数据+程序都看成是对象的一部分;
三、线程安全
synchornize:编辑后会有两条指令,monitorenter和monitorexit;分别对应操作系统对内存区域的lock和unlock;
reentrantlocak:
1、等待可中断;
2、可实现公平锁; 获取锁的顺序按照”先来后到“原则,默认情况下是非公平的,synchornize也是非公平的;
3、锁可以绑定多个条件;
current包的CAS操作是基于硬件的指令操作系统原子操作Compare-And-Swap;
自旋:忙循环,防止线程挂起;使用指令开启
锁消除:如果同步块内的数据被编辑器判断为没有溢出,则编辑器会把锁代码消除掉;
锁粗化:为了避免频繁得加锁,会自己优化为一个大的锁包围;
轻量级锁:
偏向锁:
欢迎关注我的公众号:“从零开始的it转行生”
![](https://upload-images.jianshu.io/upload_images/22777058-d0ccf15d56f2b6c7.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)