今天给各位分享atomic的的知识,其中也会对Atomic 的原理进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
1、Atomic包中的类基本的特性就是在多线程环境下,当有多个线程同时对单个(包括基本类型及引用类型)变量进行操作时,具有排他性,即当多个线程同时对该变量的值进行更新时,仅有一个线程能成功,而未成功的线程可以向自旋锁一样,继续尝试,一直等到执行成功。
2、//setuptouseUnsafe.compareAndSwapIntforupdates(更新操作时提供“比较并替换”的作用)\nprivatestaticfinalUnsafeunsafe=Unsafe.getUnsafe();\nprivatestaticfinallongvalueOffset;\n\nstatic{\n\ttry{\n\t\tvalueOffset=unsafe.objectFieldOffset\n\t\t(AtomicInteger.class.getDeclaredField("value"));\n\t}catch(Exceptionex){thrownewError(ex);}\n}\n\nprivatevolatileintvalue;
AtomicInteger类主要利用CAS(compareandswap)+volatile和native方法来保证原子操作,从而避免synchronized的高开销,执行效率大为提升。
3、CAS的原理是拿期望的值和原本的一个值作比较,如果相同则更新成新的值。UnSafe类的objectFieldOffset()方法是一个本地方法,这个方法是用来拿到“原来的值”的内存地址,返回值是valueOffset。另外value是一个volatile变量,在内存中可见,因此JVM可以保证任何时刻任何线程总能拿到该变量的最新值。
atomic的和Atomic 的原理的问题分享结束啦,以上的文章解决了您的问题吗?欢迎您下次再来哦!