Skip to content

Commit 48d25d7

Browse files
committed
添加原子类
1 parent c94ffac commit 48d25d7

File tree

3 files changed

+117
-0
lines changed

3 files changed

+117
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package cn.byhieg.threadtutorial.concurrent.atom;
2+
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;
7+
8+
/**
9+
* Created by shiqifeng on 2017/5/5.
10+
* Mail byhieg@gmail.com
11+
*/
12+
public class AtomFactory {
13+
14+
private static final AtomFactory atomFactory = new AtomFactory();
15+
16+
private AtomFactory(){
17+
18+
}
19+
20+
public static AtomFactory getInstance(){
21+
return atomFactory;
22+
}
23+
24+
public AtomicInteger createAtomInt(int a){
25+
return new AtomicInteger(a);
26+
}
27+
28+
public AtomicIntegerArray createAtomArray(int[] a) {
29+
return new AtomicIntegerArray(a);
30+
}
31+
32+
public AtomicReference<MyObject> createAtomReference(MyObject object){
33+
AtomicReference<MyObject> objectAtomicReference = new AtomicReference<>();
34+
return objectAtomicReference;
35+
}
36+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package cn.byhieg.threadtutorial.concurrent.atom;
2+
3+
/**
4+
* Created by shiqifeng on 2017/5/5.
5+
* Mail byhieg@gmail.com
6+
*/
7+
public class MyObject {
8+
9+
public String name = "byhieg";
10+
public int age = 24;
11+
public volatile int id = 1;
12+
}
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
package cn.byhieg.threadtutorialtest.concurrenttest.atomtest;
2+
3+
import cn.byhieg.threadtutorial.concurrent.atom.AtomFactory;
4+
5+
import cn.byhieg.threadtutorial.concurrent.atom.MyObject;
6+
import junit.framework.TestCase;
7+
8+
import java.util.concurrent.atomic.AtomicInteger;
9+
import java.util.concurrent.atomic.AtomicIntegerArray;
10+
import java.util.concurrent.atomic.AtomicReference;
11+
12+
/**
13+
* Created by shiqifeng on 2017/5/5.
14+
* Mail byhieg@gmail.com
15+
*/
16+
public class AtomFactoryTest extends TestCase {
17+
AtomicInteger integer;
18+
AtomicIntegerArray array;
19+
AtomicReference<MyObject> reference;
20+
21+
public void setUp() throws Exception {
22+
super.setUp();
23+
integer = AtomFactory.getInstance().createAtomInt(1);
24+
}
25+
26+
public void testAtomInt() throws Exception {
27+
new Thread(()->{
28+
for (int i = 0; i < 10; i++) {
29+
integer.getAndIncrement();
30+
System.out.println(getName() + " " + integer.get());
31+
}
32+
}).start();
33+
34+
new Thread(()->{
35+
for (int i = 0; i < 10; i++) {
36+
integer.getAndIncrement();
37+
System.out.println(getName() + " " + integer.get());
38+
}
39+
}).start();
40+
41+
Thread.sleep(1000);
42+
}
43+
44+
public void testAtomArray() throws Exception {
45+
int [] value = new int[]{1,2,3,4};
46+
array = AtomFactory.getInstance().createAtomArray(value);
47+
array.getAndSet(1,10);
48+
System.out.println(array.get(1));
49+
System.out.println(value[1]);
50+
}
51+
52+
public void testAtomRef()throws Exception {
53+
MyObject object = new MyObject();
54+
reference = AtomFactory.getInstance().createAtomReference(object);
55+
reference.set(object);
56+
MyObject newObject = new MyObject();
57+
newObject.name = "xiaoli";
58+
reference.compareAndSet(object, newObject);
59+
System.out.println(reference.get().name);
60+
61+
}
62+
63+
64+
public void tearDown() throws Exception {
65+
66+
}
67+
68+
69+
}

0 commit comments

Comments
 (0)