1.类 AtomicLongArray

  public class AtomicLongArray extends Object implements Serializable

  可以用原子方式更新其元素的 long 数组

2.构造函数详解

AtomicLongArray

public AtomicLongArray(int length)
创建给定长度的新 AtomicLongArray。

参数:
length - 该数组的长度

AtomicLongArray

public AtomicLongArray(long[] array)
创建与给定数组具有相同长度的新 AtomicLongArray,并从给定数组复制其所有元素。

参数:
array - 从中复制元素的数组
抛出:
NullPointerException - 如果数组为 null

3.方法详解

length

public final int length()
返回该数组的长度。

返回:
该数组的长度

get

public final long get(int i)
获取位置 i 的当前值。

参数:
i - 索引
返回:
当前值

set

public final void set(int i,
long newValue)
将位置 i 的元素设置为给定值。

参数:
i - 索引
newValue - 新值

lazySet

public final void lazySet(int i,
long newValue)
最终将位置 i 的元素设置为给定值。

参数:
i - 索引
newValue - 新值
从以下版本开始:
1.6

getAndSet

public final long getAndSet(int i,
long newValue)
以原子方式将位置 i 的元素设置为给定值,并返回旧值。

参数:
i - 索引
newValue - 新值
返回:
以前的值

compareAndSet

public final boolean compareAndSet(int i,
long expect,
long update)
如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。

参数:
i - 索引
expect - 预期值
update - 新值
返回:
如果成功,则返回 true。返回 false 指示实际值与预期值不相等。

weakCompareAndSet

public final boolean weakCompareAndSet(int i,
long expect,
long update)
如果当前值 == 预期值,则以原子方式将该值设置为给定的更新值。

可能意外失败并且不提供排序保证,所以只能在很少的情况下对 compareAndSet 进行适当地选择。

参数:
i - 索引
expect - 预期值
update - 新值
返回:
如果成功,则返回 true。

getAndIncrement

public final long getAndIncrement(int i)
以原子方式将索引 i 的元素加 1。

参数:
i - 索引
返回:
以前的值

getAndDecrement

public final long getAndDecrement(int i)
以原子方式将索引 i 的元素减 1。

参数:
i - 索引
返回:
以前的值

getAndAdd

public final long getAndAdd(int i,
long delta)
以原子方式将给定值与索引 i 的元素相加。

参数:
i - 索引
delta - 要加上的值
返回:
以前的值

incrementAndGet

public final long incrementAndGet(int i)
以原子方式将索引 i 的元素加1。

参数:
i - 索引
返回:
更新的值

decrementAndGet

public final long decrementAndGet(int i)
以原子方式将索引 i 的元素减1。

参数:
i - 索引
返回:
更新的值

addAndGet

public long addAndGet(int i,
long delta)
以原子方式将给定值添加到索引 i 的元素。

参数:
i - 索引
delta - 要添加的值
返回:
更新的值

toString

public String toString()
返回数组当前值的字符串表示形式。

覆盖:
Object 中的 toString
返回:
数组当前值的字符串表示形式。

java并发编程:线程安全管理类--原子操作类--AtomicLongArray的更多相关文章

  1. java并发编程 线程基础

    java并发编程 线程基础 1. java中的多线程 java是天生多线程的,可以通过启动一个main方法,查看main方法启动的同时有多少线程同时启动 public class OnlyMain { ...

  2. Java 并发编程 | 线程池详解

    原文: https://chenmingyu.top/concurrent-threadpool/ 线程池 线程池用来处理异步任务或者并发执行的任务 优点: 重复利用已创建的线程,减少创建和销毁线程造 ...

  3. Java并发编程:线程间通信wait、notify

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  4. Java并发编程:线程和进程的创建(转)

    Java并发编程:如何创建线程? 在前面一篇文章中已经讲述了在进程和线程的由来,今天就来讲一下在Java中如何创建线程,让线程去执行一个子任务.下面先讲述一下Java中的应用程序和进程相关的概念知识, ...

  5. java并发编程 | 线程详解

    个人网站:https://chenmingyu.top/concurrent-thread/ 进程与线程 进程:操作系统在运行一个程序的时候就会为其创建一个进程(比如一个java程序),进程是资源分配 ...

  6. java并发编程系列二:原子操作/CAS

    什么是原子操作 不可被中断的一个或者一系列操作 实现原子操作的方式 Java可以通过锁和循环CAS的方式实现原子操作 CAS( Compare And Swap )  为什么要有CAS? Compar ...

  7. Java并发编程——线程池的使用

    在前面的文章中,我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题: 如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统 ...

  8. Java并发编程——线程池

    本文的目录大纲: 一.Java中的ThreadPoolExecutor类 二.深入剖析线程池实现原理 三.使用示例 四.如何合理配置线程池的大小 一.Java中的ThreadPoolExecutor类 ...

  9. Java并发编程(三)Thread类的使用

    一.线程的状态 线程从创建到最终的消亡,要经历若干个状态.一般来说,线程包括以下这几个状态:创建(new).就绪(runnable).运行(running).阻塞(blocked).time wait ...

  10. [转]JAVA并发编程学习笔记之Unsafe类

    1.通过Unsafe类可以分配内存,可以释放内存:类中提供的3个本地方法allocateMemory.reallocateMemory.freeMemory分别用于分配内存,扩充内存和释放内存,与C语 ...

随机推荐

  1. 20145305 《网络对抗》注入Shellcode并执行&Return-to-libc 攻击实验

    注入Shellcode并执行 实践指导书 实践过程及结果截图 准备一段Shellcode 我这次实践和老师用的是同一个 设置环境 构造要注入的payload 我决定将返回地址改为0xffffd3a0 ...

  2. Educational Codeforces Round 21 Problem A - C

    Problem A Lucky Year 题目传送门[here] 题目大意是说,只有一个数字非零的数是幸运的,给出一个数,求下一个幸运的数是多少. 这个幸运的数不是最高位的数字都是零,于是只跟最高位有 ...

  3. Ansible 入门指南 - 学习总结

    概述 这周在工作中需要去修改 nginx 的配置,发现了同事在使用 ansible 管理者系统几乎所有的配置,从数据库的安装.nginx 的安装及配置.于是这周研究起了 ansible 的基础用法.回 ...

  4. Elasticsearch-->Get Started-->Exploring Your Cluster

    Version 直接对localhost:9200发出一个get请求 { "name": "WqeJVip", "cluster_name" ...

  5. svn的下载链接

    想要下载svn结果网上出来都是tortoisesvn 正确的链接是 源代码 http://subversion.apache.org/ 安装包 http://www.collab.net/downlo ...

  6. 【第六章】 springboot + 事务

    在实际开发中,其实很少会用到事务,一般情况下事务用的比较多的是在金钱计算方面. mybatis与spring集成后,其事务该怎么做?其实很简单,直接在上一节代码的基础上在相应的方法(通常是servic ...

  7. 2017 ACM/ICPC 新疆赛区 I 题 A Possible Tree 带权并查集

    传送门 题意:给定一棵带权树的形态, 但是并不知道每天条边的具体权重. 然后给m个信息, 信息格式为u v val, 表示在树上u 到 v 的路径上经过的边的权重的异或和为val, 问前面最多有多少个 ...

  8. Ubuntu 14.04 安装libssh

    参考: libssh [CMake] include command Ubuntu 14.04 安装libssh $ git clone https://github.com/substack/lib ...

  9. UVa 253 骰子涂色

    https://vjudge.net/problem/UVA-253 题意:输入两个骰子的六面颜色,判断是否等价. 思路:我最想到的是暴力,不过一直错,也不知道哪里错了.第二种方法就是在一个骰子里出现 ...

  10. 【转载】非Lumia 950/XL机型 强行开启continuum教程

    听说Windows 10 Mobile 的 Continuum 特性很长时间了,但是由于我自己的 Lumia 930 不在支持之列,一直没能体验到这个功能.今天在酷七看到了这篇文章,按文章所述的步骤进 ...