SeouliteLab

Java에서 AtomicLong을 활용한 원자적인 연산 처리 방법 본문

프로그래밍

Java에서 AtomicLong을 활용한 원자적인 연산 처리 방법

Seoulite Lab 2024. 3. 26. 14:05

소개:
Java에서 AtomicLong은 멀티스레드 환경에서 원자적인 연산을 수행할 수 있는 클래스입니다. 이 글에서는 AtomicLong을 사용하여 스레드 간의 안전한 연산을 처리하는 방법에 대해 알아보겠습니다.

AtomicLong 소개:
AtomicLong은 java.util.concurrent.atomic 패키지에 포함되어 있으며, long 값의 원자적인 조작을 지원합니다. 즉, 멀티스레드 환경에서 안전하게 증가, 감소, 갱신 등의 연산을 수행할 수 있습니다.

설정:
Java 5 이상 버전에서는 AtomicLong 클래스를 사용할 수 있습니다.

예제 1: AtomicLong을 사용하여 안전한 증가 연산 처리

import java.util.concurrent.atomic.AtomicLong;

public class AtomicLongExample {
    public static void main(String[] args) {
        AtomicLong counter = new AtomicLong(0);

        // 스레드 1: 카운터를 1씩 증가
        Thread thread1 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                counter.incrementAndGet();
            }
        });

        // 스레드 2: 카운터를 1씩 증가
        Thread thread2 = new Thread(() -> {
            for (int i = 0; i < 1000; i++) {
                counter.incrementAndGet();
            }
        });

        thread1.start();
        thread2.start();

        try {
            thread1.join();
            thread2.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 최종 카운터 값 출력
        System.out.println("카운터 값: " + counter.get());
    }
}

출력 결과:

카운터 값: 2000

AtomicLong 설명:
위 예제에서는 AtomicLong을 사용하여 두 개의 스레드가 안전하게 카운터를 증가시키는 방법을 보여줍니다. incrementAndGet() 메서드를 호출하여 원자적으로 증가시키므로, 스레드 간의 경쟁 상태나 데이터 불일치 문제를 방지할 수 있습니다.