Java多线程会涉及原子性,什么是原子性?原子性是指一个操作要么完成,要么不完成,不能中断,Java多线程下的原子性变量不能被修改。
Java多线程原子性
Java多线程环境下的原子操作是相对访问共享变量操作而言的,原子操作是不可分割的,原子性表现为:
访问(读、写)某个共享变量的操作从执行线程以外的任何线程来看,该操作要么已经执行结束要么尚未发生,其他线程不会“看到”该操作执行了部分的中间效果;
访问同一组共享变量的原子操作是不能够被交错的。
综上,程序的原子性指整个程序中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节;原子性操作指原子性在一个操作是不可中断的,要么全部执行成功要么全部执行失败,有着“同生共死”的感觉。在多个线程一起执行的时候,一个操作一旦开始,就不会被其他线程所干扰。
JVM内存模型中定义了八种原子操作
lock:将一个变量标识为被一个线程独占状态;
unclock:将一个变量从独占状态释放出来,释放后的变量才可以被其他线程锁定;
read:将一个变量的值从主内存传输到工作内存中,以便随后的load操作;
load:把read操作从主内存中得到的变量值放入工作内存的变量的副本中;
use:把工作内存中的一个变量的值传给执行引擎,每当虚拟机遇到一个使用到变量的指令时都会使用该指令;
assign:把一个从执行引擎接收到的值赋给工作内存中的变量,每当虚拟机遇到一个给变量赋值的指令时,都要使用该操作;
store:把工作内存中的一个变量的值传递给主内存,以便随后的write操作;
write:把store操作从工作内存中得到的变量的值写到主内存中的变量。
2024年云服务器租用优惠价格,11月最新: