java atomiclong 使用_Java并发AtomicLongArray类
全屏
java.util.concurrent.atomic.AtomicLongArray類提供了可以原子讀取和寫入的底層long類型數組的操作,并且還包含高級原子操作。?AtomicLongArray支持對基礎long類型數組變量的原子操作。 它具有獲取和設置方法,如在變量上的讀取和寫入。 也就是說,一個集合與同一變量上的任何后續獲取相關聯。 原子compareAndSet方法也具有這些內存一致性功能。
AtomicLongArray類中方法
以下是AtomicLongArray類中可用的重要方法的列表。序號方法描述1public long addAndGet(int i, long delta)原子地將給定的值添加到索引i的元素。
2public boolean compareAndSet(int i, long expect, long update)如果當前值==期望值,則將位置i處的元素原子設置為給定的更新值。
3public long decrementAndGet(int i)索引i處的元素原子并自減1。
4public long get(int i)獲取位置i的當前值。
5public long getAndAdd(int i, long delta)原子地將給定的值添加到索引i的元素。
6public long getAndDecrement(int i)索引i處的元素原子并自減1,并返回舊值。
7public long getAndIncrement(int i)將位置i處的元素原子設置為給定值,并返回舊值。
8public long getAndSet(int i, long newValue)將位置i處的元素原子設置為給定值,并返回舊值。
9public long incrementAndGet(long i)在索引i處以原子方式自增元素。
10public void lazySet(int i, long newValue)最終將位置i處的元素設置為給定值。
11public int length()返回數組的長度。
12public void set(int i, long newValue)將位置i處的元素設置為給定值。
13public String toString()返回數組的當前值的String表示形式。
14public boolean weakCompareAndSet(int i, int expect, long update)如果當前值==期望值,則將位置i處的元素原子設置為給定的更新值。
實例
以下TestThread程序顯示了基于線程的環境中AtomicIntegerArray變量的使用。import?java.util.concurrent.atomic.AtomicLongArray;
public?class?TestThread?{
private?static?AtomicLongArray?atomicLongArray?=?new?AtomicLongArray(10);
public?static?void?main(final?String[]?arguments)?throws?InterruptedException?{
for?(int?i=0;?i
atomicLongArray.set(i,?1);
}
Thread?t1?=?new?Thread(new?Increment());
Thread?t2?=?new?Thread(new?Compare());
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println("Values:?");
for?(int?i=0;?i
System.out.print(atomicLongArray.get(i)?+?"?");
}
}
static?class?Increment?implements?Runnable?{
public?void?run()?{
for(int?i=0;?i
long?add?=?atomicLongArray.incrementAndGet(i);
System.out.println("Thread?"?+?Thread.currentThread().getId()
+?",?index?"?+i?+?",?value:?"+?add);
}
}
}
static?class?Compare?implements?Runnable?{
public?void?run()?{
for(int?i=0;?i
boolean?swapped?=?atomicLongArray.compareAndSet(i,?2,?3);
if(swapped){
System.out.println("Thread?"?+?Thread.currentThread().getId()
+?",?index?"?+i?+?",?value:?3");
}
}
}
}
}
這將產生以下結果 -Thread?9,?index?0,?value:?2
Thread?10,?index?0,?value:?3
Thread?9,?index?1,?value:?2
Thread?9,?index?2,?value:?2
Thread?9,?index?3,?value:?2
Thread?9,?index?4,?value:?2
Thread?10,?index?1,?value:?3
Thread?9,?index?5,?value:?2
Thread?10,?index?2,?value:?3
Thread?9,?index?6,?value:?2
Thread?10,?index?3,?value:?3
Thread?9,?index?7,?value:?2
Thread?10,?index?4,?value:?3
Thread?9,?index?8,?value:?2
Thread?9,?index?9,?value:?2
Thread?10,?index?5,?value:?3
Thread?10,?index?6,?value:?3
Thread?10,?index?7,?value:?3
Thread?10,?index?8,?value:?3
Thread?10,?index?9,?value:?3
Values:
3?3?3?3?3?3?3?3?3?3
分享到:
0評論
總結
以上是生活随笔為你收集整理的java atomiclong 使用_Java并发AtomicLongArray类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 世界上覆盖范围最广的计算机网络是 ( )
- 下一篇: 【OpenCV 例程200篇】37. 图