并发概率下的内存模型
java定义了一个内存模型,从硬件/操作系统中抽象出来。对比C/C++直接用操作系统的内存是不同的。


工作内存(working memory):线程自己独占的内存。线程的工作内存是主内存的一份拷贝。
主内存(main memory):实际上存放所有线程的数据的地方。
工作内存和主内存如何交互
这些都是原子性操作的:
- lock
- unlock
- read
- load
- use
- assign
- store
- write
volatile:直接访问主内存。
一般用于修饰单例,初始化变量。
不能保护变量做运算时候的线程安全。(运算的话使用current包的atoms相关类)
long/double的非原子性协定:
在32位系统中,对long、double进行读写操作, 是分为2个动作的。不过具体JVM会把这个动作原子性实现了。。。
JVM并发特性
不可切割。lock、unlock。。。等操作;synchronized块。
一个线程修改了共享变量后,另外一个线程立即看得到。volatile/final/synchronized。
本线程类观察,所有操作有序;其他线程观察就是无序。(线程内表现为有序)
java线程如何实现
源码中看到, java中的线程都是native本地方法,平台相关性重的。
可能手段:1、使用内核线程;2、使用用户线程;3、使用混合实现(内核线程+用户线程。也就是N:M关系)
线程状态
线程状态:
- new,
- runnable,
- timed waiting,
- waiting,
- blocked,
- terminated.

内存模型和并发的笔记
原文:http://www.cnblogs.com/ELMND/p/4737580.html