soominkim Study
article thumbnail
Published 2023. 1. 27. 23:29
[Java] AtomicLong Java
728x90

AtomicLong

Long 자료형을 갖고 있는 Wrapping Class로 Thread-safe로 구현되어 Multi-Thread에서 Synchronized 없이 사용할 수 있다.  또한 Synchronized보다 적은 비용으로 동시성을 보장한다.

 

1. AtomicLong 객체 생성

package AtomicLong;

import java.util.concurrent.atomic.AtomicLong;

public class AtomicLongClass {

	public static void main(String[] args) {
		AtomicLong atomic = new AtomicLong();
		System.out.println(atomic.get());
	}

}

AtomicLong()은 초기값이 0인 AutomicLong을 생성한다. 값을 읽고자 한다면 get() 메소드를 사용하고 값을 변경하고자 한다면 set(Value) 메소드를 사용한다. 혹 현재 설정된 값을 리턴하고 새로운 값으로 업데이트하고 싶다면 getAndset(Value) 메소드를 사용하면 된다. 

 

2. 초기화된 AutomicLong 객체 생성

package AtomicLong;

import java.util.concurrent.atomic.AtomicLong;

public class AtomicLongClass {

	public static void main(String[] args) {
		AtomicLong atomic = new AtomicLong(1);
		System.out.println(atomic.get());
	}

}

만약 0이 아닌 특정 값부터 시작하고 싶다면 위와 같이 작성하면 된다.

 

3. getAndUpdate() / updateAndGet()

getAndUpdate(LongUnaryOperator)는 getAndSet()과 같은 기능을 수행하지만 다르다. getAndSet()의 경우 값을 입력해 해당 값으로 변경했다면 getAndUpdate(LongUnaryOperator)는 두번째인자에 람다식을 전달한다. updateAndGet(LongUnaryOperator)는 업데이트 후 설정된 값을 리턴한다.

 

3-1. getAndUpdate(LongUnaryOperator)

package AtomicLong;

import java.util.concurrent.atomic.AtomicLong;
import java.util.function.LongUnaryOperator;

public class AtomicLongClass {

	public static void main(String[] args) {
		AtomicLong atomic = new AtomicLong(10);
		LongUnaryOperator add = (n) -> n+n;
		atomic.getAndUpdate(add);
		System.out.println(atomic.get());
	}

}

3-2. updateAndGet(LongUnaryOperator)

package AtomicLong;

import java.util.concurrent.atomic.AtomicLong;
import java.util.function.LongUnaryOperator;

public class AtomicLongClass {

	public static void main(String[] args) {
		AtomicLong atomic = new AtomicLong(10);
		LongUnaryOperator add = (n) -> n+n;
		atomic.updateAndGet(add);
		System.out.println(atomic.get());
	}

}

3-1. getAndUpdate(LongUnaryOperator)의 경우 출력하면 AutomicLong의 초기 값인 10이 출력될 되고 3-2. updateAndGet(LongUnaryOperator)의 경우 출력하면 10을 더한 20이 출력된다. 

 

4. getAndIncrement() / getAndAdd()

- getAndIncrement() : 현재 값을 반환하고 +1를 증가시킨다.

- incrementAndGet() : +1를 증가시키고 변경된 값을 반환한다.

- getAndDecrement() : 현재 값을 반환하고 -1 감소시킨다.

- decrementAndGet() : -1를 감소시키고 변경된 값을 반환한다.

- getAndAdd(Value) : 현재 값을 반환하고 현재 값에 Value를 더한다.

- addAndGet(Value) : 현재 값에 Value를 더하고 값을 반환한다.

728x90

'Java' 카테고리의 다른 글

[Java] BufferedReader / Bufferedwriter  (0) 2023.03.24
[Java] Record Class  (0) 2023.01.27
[Java] 상속(Inheritance)  (0) 2023.01.24
[Java] Arrays.sort  (0) 2023.01.12
[Java] indexOf/lastIndexOF  (0) 2023.01.12
profile

soominkim Study

@soominkim

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

검색 태그