Skip to content

Commit 4d5f713

Browse files
committed
增加原子类更新字段的方法
1 parent 48d25d7 commit 4d5f713

2 files changed

Lines changed: 19 additions & 6 deletions

File tree

src/main/java/cn/byhieg/threadtutorial/concurrent/atom/AtomFactory.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package cn.byhieg.threadtutorial.concurrent.atom;
22

3-
import java.util.concurrent.atomic.AtomicInteger;
4-
import java.util.concurrent.atomic.AtomicIntegerArray;
5-
import java.util.concurrent.atomic.AtomicLong;
6-
import java.util.concurrent.atomic.AtomicReference;
3+
import java.util.concurrent.atomic.*;
74

85
/**
96
* Created by shiqifeng on 2017/5/5.
@@ -30,7 +27,10 @@ public AtomicIntegerArray createAtomArray(int[] a) {
3027
}
3128

3229
public AtomicReference<MyObject> createAtomReference(MyObject object){
33-
AtomicReference<MyObject> objectAtomicReference = new AtomicReference<>();
34-
return objectAtomicReference;
30+
return new AtomicReference<>();
31+
}
32+
33+
public AtomicIntegerFieldUpdater<MyObject> createAtomIntegerUpdate(String fieldName) {
34+
return AtomicIntegerFieldUpdater.newUpdater(MyObject.class, fieldName);
3535
}
3636
}

src/test/java/cn/byhieg/threadtutorialtest/concurrenttest/atomtest/AtomFactoryTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
import java.util.concurrent.atomic.AtomicInteger;
99
import java.util.concurrent.atomic.AtomicIntegerArray;
10+
import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;
1011
import java.util.concurrent.atomic.AtomicReference;
1112

1213
/**
@@ -17,13 +18,15 @@ public class AtomFactoryTest extends TestCase {
1718
AtomicInteger integer;
1819
AtomicIntegerArray array;
1920
AtomicReference<MyObject> reference;
21+
AtomicIntegerFieldUpdater<MyObject> updater;
2022

2123
public void setUp() throws Exception {
2224
super.setUp();
2325
integer = AtomFactory.getInstance().createAtomInt(1);
2426
}
2527

2628
public void testAtomInt() throws Exception {
29+
System.out.println("int原子类");
2730
new Thread(()->{
2831
for (int i = 0; i < 10; i++) {
2932
integer.getAndIncrement();
@@ -42,6 +45,7 @@ public void testAtomInt() throws Exception {
4245
}
4346

4447
public void testAtomArray() throws Exception {
48+
System.out.println("原子类数组");
4549
int [] value = new int[]{1,2,3,4};
4650
array = AtomFactory.getInstance().createAtomArray(value);
4751
array.getAndSet(1,10);
@@ -50,14 +54,23 @@ public void testAtomArray() throws Exception {
5054
}
5155

5256
public void testAtomRef()throws Exception {
57+
System.out.println("原子类");
5358
MyObject object = new MyObject();
5459
reference = AtomFactory.getInstance().createAtomReference(object);
5560
reference.set(object);
5661
MyObject newObject = new MyObject();
5762
newObject.name = "xiaoli";
5863
reference.compareAndSet(object, newObject);
5964
System.out.println(reference.get().name);
65+
}
66+
6067

68+
public void testUpdater() throws Exception {
69+
System.out.println("原子类更新字段");
70+
updater = AtomFactory.getInstance().createAtomIntegerUpdate("id");
71+
MyObject object = new MyObject();
72+
System.out.println(updater.getAndIncrement(object));
73+
System.out.println(updater.get(object));
6174
}
6275

6376

0 commit comments

Comments
 (0)