@@ -904,6 +904,31 @@ public interface Callable<V> {
904904- ` AtomicLongFieldUpdater ` :原子更新长整形字段的更新器
905905- ` AtomicReferenceFieldUpdater ` :原子更新引用类型字段的更新器
906906
907+ 注意:在使用的时候bean的字段必须要不能是private 而且是volatile字段
908+
909+ ``` java
910+ public class AtomUser {
911+ // 不能是private, 必须要volatile
912+ public volatile String name;
913+
914+ public AtomUser () {
915+ }
916+
917+ @Test
918+ void AtomicReferenceField () {
919+ // cannot access a member of class mytest.jdk.thread.atoms.AtomUser with modifiers "private"
920+ // Must be volatile type
921+ AtomicReferenceFieldUpdater<AtomUser , String > fieldUpdater
922+ = AtomicReferenceFieldUpdater . newUpdater(AtomUser . class, String . class, " name" );
923+ String name = " old name" ;
924+ AtomUser atomUser = new AtomUser (name);
925+ boolean b1 = fieldUpdater. compareAndSet(atomUser, name, " 新的名字" );
926+ boolean b2 = fieldUpdater. compareAndSet(atomUser, name, " 新的名字2" );
927+ }
928+ ```
929+
930+
931+
907932### 2.3 . 24. AQS 了解么?
908933
909934AQS 的全称为(`AbstractQueuedSynchronizer `),这个类在`java. util. concurrent. locks`包下面。
@@ -933,7 +958,8 @@ AQS 原理这部分参考了部分博客,在 5.2 节末尾放了链接。
933958AQS 使用一个 int 成员变量来表示同步状态,通过内置的 FIFO 队列来完成获取资源线程的排队工作。AQS 使用 CAS 对该同步状态进行原子操作实现对其值的修改。
934959
935960```java
936- private volatile int state;// 共享变量,使用volatile修饰保证线程可见性
961+ // 共享变量,使用volatile修饰保证线程可见性
962+ private volatile int state;
937963```
938964
939965状态信息通过 protected 类型的 getState,setState,compareAndSetState 进行操作
0 commit comments