原子操作和volatile关键字
原子操作 :不可被中断的操作。要么全执行,要么全不执行。 现代CPU读取内存,通过读取缓存再写入主存。先去主存读--->写入缓存---->运行线程--->写入缓存---->写入主存 多cpu时会出现缓存一致性和总线锁的问题。 只有简单的读取,赋值操作,即一步完成的操作才是原子操作。 volatile,synchronized,lock 能保证可见性, volatile保证修改的值立即更新到主存,synchronized和lock保证同一时刻只有一个线程操作变量,在锁被释放前会将新值写入内存。 线程的有序性: java内存模型具备一些先天的有序性,即 happensbefore(先行发生)原则 : 1,程序次序规则,一个线程内,按照代码书写顺序执行 2,锁定规则,一个解锁操作ounlock先行发生于后面对同一个锁的lock操作 3,volatile变量规则,对一个变量的写操作先行发生于后面对这个变量的读操作 4,传递规则,A先发生于B,B先发生于C,则A先发生于C 5,线程启动规则,Thread对象的start()方法先行发生于此线程的每一个操作 6,线程中断规则,对线程interrupt()方法的调用先行发生于被中断线程的代码检测到中断事件的发生,即中断的发生先于中断被检测到 7,线程终结规则,线程中所有的操作都先行发生于线程的中止检测,可以通过Thread.join()方法结束