atomiclong 初始化_[Curator] Distributed Atomic Long 的使用与分析

本文详细介绍了Apache Curator的DistributedAtomicLong,它是一个用于分布式环境的原子递增计数器。该计数器采用乐观锁策略,失败时转为互斥锁,配合重试策略确保操作的正确性。文章涵盖了关键API、机制说明、使用方法、错误处理及源码分析,展示了其在乐观锁和排他锁模式下的创建与操作,并强调每次操作后需检查AtomicValue的succeeded()结果。
摘要由CSDN通过智能技术生成

Distributed Atomic Long

分布式原子长整型

一个可以进行原子递增操作的计数器。

内部使用乐观锁实现,当失败时,再尝试加互斥排他锁。不论是乐观锁还是排他锁,都会按照重试策略进行重试操作。

1. 关键 API

org.apache.curator.framework.recipes.atomic.DistributedAtomicLong

org.apache.curator.framework.recipes.atomic.AtomicValue

org.apache.curator.framework.recipes.atomic.PromotedToLock

2. 机制说明

内部通过DistributedAtomicValue来实现分布式原子数据的操作。

使用乐观锁

先尝试无锁的版本更新

不行再尝试加锁,并再次重试

使用重试策略管理

需要检查返回值是否成功(类似mongodb)

3. 用法

3.1 创建

乐观锁模式

public DistributedAtomicLong(CuratorFramework client,

String counterPath,

RetryPolicy retryPolicy)

需要指定重试策略

排他锁模式

public DistributedAtomicLong(CuratorFramework client,

String counterPath,

RetryPolicy retryPolicy,

PromotedToLock promotedToLock)

需要指定重试策略

配置锁的相关信息

3.2 使用

对数值的操作:

get()

increment()

decrement()

add()

subtract()

检查结果

操作完之后,必须调用succeeded()进行检查

只有当返回true时,才能说明操作成功

如果操作成功,还可以:

preValue() 获取操作之前的值

postValue() 获取操作之后的值

4. 错误处理

这些原子实例的每一次方法调用都会访问ZK服务。所以,都会使用重试机制,而且一旦发生错误,就会抛出异常。

5. 源码分析

5.1 类定义

public interface DistributedAtomicNumber{}

public class DistributedAtomicLong implements DistributedAtomicNumber{}

实现了org.apache.curator.framework.recipes.atomic.DistributedAtomicNumber接口

定义了原子数值类型的基本操作api

AtomicValue add(T delta)

增加,并返回新值

AtomicValue compareAndSet(T expectedValue, T newValue)

CAS更新,并返回新值

AtomicValue decrement()

递减,并返回新值

void forceSet(T newValue)

强制覆盖更新

AtomicValue get()

获取当前值

AtomicValue increment()

递增,并返回新值

boolean initialize(T value)

初始化

如果设值成功,则返回true

如果节点已经存在,则返回false

AtomicValue subtract(T delta)

减去,并返回新值

AtomicValue trySet(T newValue)

尝试更新新值

需要调用AtomicValue.succeeded(),对操作结果进行检查

5.2 成员变量

public class DistributedAtomicLong implements DistributedAtomicNumber

{

private final DistributedAtomicValue value;

}

很简单,只定义了一个org.apache.curator.framework.recipes.atomic.DistributedAtomicValue

public class DistributedAtomicValue

{

private final Cura

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值