Atomic Class는 volatile 키워드와 CAS 알고리즘을 사용해
다중 스레드 환경에서 읽기/쓰기 작업을 병행해도 Data의 정합성을 보장하는 Class이다.
스레드를 Blocking하지 않기 때문에 Syncronized 블록을 사용하는 것 보다 성능적면에서 유리하다.
** Atomic Integer와 int로 값 증가 iteration 시간 비교
public static void main(String[] args) {
long stAtomic = System.currentTimeMillis();
long stAtomicNano = System.nanoTime();
AtomicInteger atomicNum = new AtomicInteger(0);
for (int i = 0; i < 1000_0000; i++) {
atomicNum.addAndGet(1);
}
long etAtomic = System.currentTimeMillis();
long etAtomicNano = System.nanoTime();
System.out.println((etAtomic - stAtomic) + " ms");
System.out.println((etAtomicNano - stAtomicNano) + " ns");
long st = System.currentTimeMillis();
long stNano = System.nanoTime();
long num = 0;
for (int i = 0; i < 1000_0000; i++) {
num++;
}
long et = System.currentTimeMillis();
long etNano = System.nanoTime();
System.out.println((et - st) + " ms");
System.out.println((etNano - stNano) + " ns");
System.out.println(atomicNum);
System.out.println(num);
}
10만: 2.02 ms / 0.17 ms
100만: 6.59 ms / 4.91 ms
1000만: 45.84 ms / 4.33 ms
1억: 460.82 ms / 5.52 ms
10억: 4394.06 ms / 11.17 ms
'~2022 > Java' 카테고리의 다른 글
[Java] HashMap, HashTable, ConcurrentHashMap (0) | 2021.10.25 |
---|---|
[Java] HashMap, TreeMap, LinkedHashMap (0) | 2021.10.25 |
[Java] DTO와 VO의 차이 (0) | 2021.08.22 |