Java Concurrency - Lớp AtomicLong

Một lớp java.util.concurrent.atomic.AtomicLong cung cấp các phép toán dựa trên giá trị dài cơ bản có thể đọc và viết nguyên tử, đồng thời cũng chứa các phép toán nguyên tử nâng cao. AtomicLong hỗ trợ các hoạt động nguyên tử trên biến dài cơ bản. Nó có các phương thức get và set hoạt động như đọc và ghi trên các biến dễ bay hơi. Nghĩa là, một tập hợp có mối quan hệ xảy ra trước với bất kỳ lần nhận nào tiếp theo trên cùng một biến. Phương thức so sánh nguyên tử cũng có các tính năng nhất quán bộ nhớ này.

Phương pháp AtomicLong

Sau đây là danh sách các phương thức quan trọng có sẵn trong lớp AtomicLong.

Sr.No. Phương pháp & Mô tả
1

public long addAndGet(long delta)

Nguyên tử thêm giá trị đã cho vào giá trị hiện tại.

2

public boolean compareAndSet(long expect, long update)

Nguyên tử đặt giá trị thành giá trị cập nhật nhất định nếu giá trị hiện tại giống với giá trị mong đợi.

3

public long decrementAndGet()

Nguyên tử giảm một giá trị hiện tại.

4

public double doubleValue()

Trả về giá trị của một số được chỉ định dưới dạng nhân đôi.

5

public float floatValue()

Trả về giá trị của số đã chỉ định dưới dạng số thực.

6

public long get()

Nhận giá trị hiện tại.

7

public long getAndAdd(long delta)

Atomiclly thêm giá trị đã cho vào giá trị hiện tại.

số 8

public long getAndDecrement()

Nguyên tử giảm một giá trị hiện tại.

9

public long getAndIncrement()

Nguyên tử tăng một giá trị hiện tại.

10

public long getAndSet(long newValue)

Đặt nguyên tử thành giá trị đã cho và trả về giá trị cũ.

11

public long incrementAndGet()

Nguyên tử tăng một giá trị hiện tại.

12

public int intValue()

Trả về giá trị của số được chỉ định dưới dạng int.

13

public void lazySet(long newValue)

Cuối cùng đặt thành giá trị đã cho.

14

public long longValue()

Trả về giá trị của số được chỉ định dưới dạng dài.

15

public void set(long newValue)

Đặt thành giá trị đã cho.

16

public String toString()

Trả về biểu diễn chuỗi của giá trị hiện tại.

17

public boolean weakCompareAndSet(long expect, long update)

Nguyên tử đặt giá trị thành giá trị cập nhật nhất định nếu giá trị hiện tại giống với giá trị mong đợi.

Thí dụ

Chương trình TestThread sau đây cho thấy một cách triển khai bộ đếm an toàn bằng cách sử dụng AtomicLong trong môi trường dựa trên luồng.

import java.util.concurrent.atomic.AtomicLong;

public class TestThread {

   static class Counter {
      private AtomicLong c = new AtomicLong(0);

      public void increment() {
         c.getAndIncrement();
      }

      public long value() {
         return c.get();
      }
   }

   public static void main(final String[] arguments) throws InterruptedException {
      final Counter counter = new Counter();
      
      //1000 threads
      for(int i = 0; i < 1000 ; i++) {
         
         new Thread(new Runnable() {
            
            public void run() {
               counter.increment();
            }
         }).start();	
      }
      Thread.sleep(6000);			   		  
      System.out.println("Final number (should be 1000): " + counter.value());
   }
}

Điều này sẽ tạo ra kết quả sau.

Đầu ra

Final number (should be 1000): 1000