全屏

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类相关推荐

  1. java atomiclong 使用_Java并发AtomicLong接口

    全屏 java.util.concurrent.atomic.AtomicLong类提供了可以被原子地读取和写入的底层long值的操作,并且还包含高级原子操作. AtomicLong支持基础long类 ...

  2. java atomiclong 使用_java并发:原子类之AtomicLong

    原子类之AtomicLong java线程中的操作,需要满足原子性.可见性等原则,比如i++这样的操作不具备原子性, A线程读取了i,另一个线程执行i++,A线程再执行i++就会引发线程安全问题 推荐 ...

  3. java 匿名类型_Java之匿名类讲解

    匿名类,正如名字一样在java中没有名字标识的类,当然了编译后还是会安排一个名字的. 下面是一个关于匿名类的简单例子: public classClient {public static voidma ...

  4. java载入器材_JAVA之了解类载入器Classloader

    1.类的载入.连接和初始化 类初始化通常包含载入.连接.初始化三个步骤. (1)进程的结束 每当执行一个java程序时,将会启动一个java虚拟机进程,无论程序多么复杂.有多少线程.都在这个java虚 ...

  5. java zipfile用法_Java使用ZipFile类实现Zip文件解压

    java.util.zip.ZipFile类用于从 ZIP 文件读取条目. 即从给定的ZIP压缩文件中获取所有文件的信息,如:文件的名称.是否为目录等信息.可以使用这个类来实现将zip文件进行解压操作 ...

  6. java 延迟初始化_Java并发编程——延迟初始化占位类模式

    --仅作笔记使用,内容多摘自<java并发编程实战> 在并发编程中,如果状态变量仅在单个线程中初始化和使用,自然是线程安全的,但一旦涉及到线程间的数据交互,如何声明一个用于多线程的单例状态 ...

  7. JAVA线程并发数量控制_Java并发工具类(三):控制并发线程数的Semaphore

    作用 Semaphore(信号量)是用来控制同时访问特定资源的线程数量,它通过协调各个线程,以保证合理的使用公共资源. 简介 Semaphore也是一个线程同步的辅助类,可以维护当前访问自身的线程个数 ...

  8. java闭锁_Java并发工具类(闭锁CountDownLatch)

    闭锁是一种同步工具类,可以延迟线程的进度直到其到达终止状态. CountDownLatch是一种灵活的闭锁实现,它可以使一个或者多个线程等待一组事件的发生. 闭锁状态包含一个计数器,该计数器被初始化为 ...

  9. java 栅栏_Java 并发工具类(栅栏 CyclicBarrier )

    CyclicBarrier适用于这样的情况:你希望创建一组任务,它们并行地执行工作,然后在下一个步骤之前等待,直到所有任务都完成.栅栏和闭锁的关键区别在于,所有线程必须同时到达栅栏位置,才能继续执行. ...

最新文章

  1. 【Echarts】当页面宽度改变时如何使图表宽度自适应
  2. jsp教学网站百度文库_基于JSP的精品课程网站设计与实现
  3. oracle备份恢复之rman恢复到异机
  4. 潘建伟团队进行人类首次洲际量子通信 都发送了什么
  5. python开发网络小工具_Python集成网络诊断小工具(含有ping,tracert,tcping等小工具)...
  6. Django从理论到实战(part25)--数据库操作
  7. 最少交换次数python_leetcode第200周赛第三题leetcode1536. 排布二进制网格的最少交换次数...
  8. ideal2018提示内存不足_基于IDEA2018卡死不动的解决方式(好用)
  9. ROS笔记之回调函数
  10. Android IPC通信系列篇
  11. Java集合框架源码解读(4)——WeakHashMap
  12. Nginx正向代理原理和部署方案
  13. 计算机页面下没有桌面图标,电脑下面小图标没了怎么办
  14. 沧海的孤塔-chimera
  15. 【原创】我所亲证的气功层次 ——了空居士
  16. 菜狗杯Misc你会异或吗wp
  17. 转自汇编网: 高三老师给大一学生的一封信(感动!)
  18. 全球时间与北京时间、UTC时间关系表
  19. 虚拟盒子下装linux系统,eUnoBox(虚拟盒子) v3.14免费版
  20. Java Swing添加背景图片

热门文章

  1. springBoot 简单优雅是实现文件上传和下载
  2. IoT -- (四) 物联网系统架构介绍
  3. 关于异常nested exception is java.lang.NoClassDefFoundError: org/apache/commons/fileupload/FileItemFactor
  4. php一句话怎么写_PHP一句话木马后门
  5. haproxy keepalived_Haproxy+KeepAlived+Mycat实现高可用集群
  6. 5乘7的c语言程序,C语言程序设计实验5-7教案(20页)-原创力文档
  7. 4加密问题漏洞修复_Apache Shiro 反序列化漏洞实战
  8. Spring —— IoC 容器详解
  9. 分压式静态工作点稳定电路
  10. 在一起计时器_古典计时器简介之一 qqtimer