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를 더하고 값을 반환한다.
'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 |