进程一般作为资源的组织单位,是计算机程序的运行实例,表示正在执行的指令,有自己独立的地址空间,包含程序内容和数据,进程间资源和状态相互隔离。
线程是程序的执行流程,CPU调度执行的基本单位,有自己的程序计数器,寄存器,堆栈,帧,共享同一进程的地址空间,内存和其他资源。
当虚拟机中运行的所有线程都是守护线程时,虚拟机终止运行。
使用共享内存的方式进行多线程通信的话,可能造成可见性的相关问题,即一个线程所做的修改对于其他的线程不可见,导致其他线程仍然使用错误的值。
造成的原因:
(1)多线程的实际执行顺序
(2)CPU采用的层次结构的多级缓存架构
在写入时数据被先写入缓存中,之后在某个特定的时间被写回主存。不同的CPU可能采用不同的写入策略,如写穿透或者写返回等。由于缓存的存在,在某些时间点上,缓存中的数据域主存中的数据可能是不一致的。
(3)CPU指令重排
描述了程序中共享变量的关系以及在主存中写入和读取这些变量值得底层细节。
原文:http://my.oschina.net/scipio/blog/297650