Skip to content

Commit 2e4db1f

Browse files
committed
AtomicStampedReferenceDemo
1 parent 0263d78 commit 2e4db1f

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package chapter4;
2+
3+
import java.util.concurrent.atomic.AtomicStampedReference;
4+
5+
/**
6+
* Created by 13 on 2017/5/6.
7+
*/
8+
public class AtomicStampedReferenceDemo {
9+
static AtomicStampedReference<Integer> money = new AtomicStampedReference<Integer>(19, 0);
10+
11+
public static void main(String args[]) {
12+
13+
for (int i = 0; i < 100; i++) {
14+
final int timestap = money.getStamp();
15+
new Thread() {
16+
public void run() {
17+
while (true) {
18+
Integer m = money.getReference();
19+
if (m < 20) {
20+
if (money.compareAndSet(m, m + 20, timestap, timestap + 1)) {
21+
System.out.println("余额小于20元,充值成功,余额:" + money.getReference() + "元");
22+
break;
23+
}
24+
} else {
25+
System.out.println("余额大于20,无需充值");
26+
break;
27+
}
28+
}
29+
}
30+
}.start();
31+
}
32+
33+
new Thread() {
34+
public void run() {
35+
for (int i = 0; i < 100; i++) {
36+
37+
while (true) {
38+
int timestap = money.getStamp();
39+
Integer m = money.getReference();
40+
if (m > 10) {
41+
System.out.println("金额大于10元");
42+
if (money.compareAndSet(m, m - 10, timestap, timestap + 1)) {
43+
System.out.println("成功消费10元,余额:" + money.getReference() + "元");
44+
break;
45+
}
46+
} else {
47+
System.out.println("没有足够的金额");
48+
break;
49+
}
50+
}
51+
try {
52+
Thread.sleep(100);
53+
} catch (InterruptedException e) {
54+
e.printStackTrace();
55+
}
56+
}
57+
}
58+
}.start();
59+
60+
}
61+
}

0 commit comments

Comments
 (0)