-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathAtomicVariableTest.java
More file actions
33 lines (29 loc) · 1.2 KB
/
Copy pathAtomicVariableTest.java
File metadata and controls
33 lines (29 loc) · 1.2 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// Copyright: Ganesh Samarthyam, 2016; www.codeops.tech
import java.util.concurrent.atomic.*;
// Class to demonstrate how incrementing "normal" (i.e., thread unsafe) integers and incrementing
// "atomic" (i.e., thread safe) integers are different: Incrementing a shared Integer object without locks can result
// in a data race; however, incrementing a shared AtomicInteger will not result in a data race.
class AtomicVariableTest {
// Create two integer objects – one normal and another atomic – with same initial value
private static Integer integer = new Integer(0);
private static AtomicInteger atomicInteger = new AtomicInteger(0);
static class IntegerIncrementer extends Thread {
public void run() {
++integer;
}
}
static class AtomicIntegerIncrementer extends Thread {
public void run() {
atomicInteger.incrementAndGet();
}
}
public static void main(String []args) {
// create three threads each for incrementing atomic and "normal" integers
for(int i = 0; i < 10; i++) {
new IntegerIncrementer().start();
new AtomicIntegerIncrementer().start();
}
System.out.printf("final int value = %d and final AtomicInteger value = %d",
integer, atomicInteger.intValue());
}
}