- Hazelcast 教程
- Hazelcast - 首页
- Hazelcast - 简介
- Hazelcast - 设置
- Hazelcast - 第一个应用程序
- Hazelcast - 配置
- 设置多节点实例
- Hazelcast - 数据结构
- Hazelcast - 客户端
- Hazelcast - 序列化
- Hazelcast 高级特性
- Hazelcast - Spring 集成
- Hazelcast - 监控
- Map Reduce & 聚合
- Hazelcast - 集合监听器
- 常见问题 & 性能技巧
- Hazelcast 有用资源
- Hazelcast - 快速指南
- Hazelcast - 有用资源
- Hazelcast - 讨论
Hazelcast - IAtomicLong
Java 中的 Atomic Long 数据结构提供了一种线程安全的方式来使用 Long。
类似地,IAtomicLong 更像是一个 AtomicLong 的分布式版本。它提供了类似的功能,其中以下一些是有用的:set、get、getAndSet、incrementAndGet。这里需要注意的一点是,由于数据结构分布在多台机器上,以上函数的性能可能并不相同。
AtomicLong 只有一个同步备份,这意味着如果我们的设置中运行着 5 个 JVM,那么只有两个 JVM 会保存此变量。
让我们来看一些有用的函数。
初始化并将值设置为 IAtomicLong
示例
public class Application { public static void main(String... args) throws IOException { //initialize hazelcast instance and the counter variable Hazelcast – Data Structures HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance(); IAtomicLong counter = hazelcast.getAtomicLong("counter"); System.out.println(counter.get()); counter.set(2); System.out.println(counter.get()); System.exit(0); } }
输出
执行上述代码时,将产生以下输出
0 2
跨 JVM 的同步
Atomic Long 提供跨 JVM 的并发控制。因此,incrementAndGet、compareAndSet 等方法可以用来原子地更新计数器。
示例
让我们在两个 JVM 上同时执行下面的代码
public class AtomicLong2 { public static void main(String... args) throws IOException, InterruptedException { // initialize hazelcast instance HazelcastInstance hazelcast = Hazelcast.newHazelcastInstance(); IAtomicLong counter = hazelcast.getAtomicLong("counter"); for(int i = 0; i < 1000; i++) { counter.incrementAndGet(); } System.exit(0); } }
输出
上述代码输出的第二行将始终为:
2000
如果 incrementAndGet() 不是线程安全的,上述代码可能不会始终输出 2000。它可能小于 2000,因为一个线程的写入可能被另一个线程覆盖。
常用方法
序号 | 函数名称 & 描述 |
---|---|
1 | get() 返回当前值 |
2 | set(long newValue) 将值设置为 newValue |
3 | addAndGet(long value) 原子地添加值并返回更新后的值 |
4 | decrementAndGet(long value) 原子地减去值并返回更新后的值 |
5 | getAndAdd(long value) 原子地返回当前值并存储当前值和值的和 |
6 | getAndDecrement(long value) 原子地返回当前值并存储当前值减去值的结果 |
7 | compareAndSet(long expected,long newValue) 如果 oldValue 等于 expected 值,则原子地将值设置为 newValue |
8 | decrementAndGet(long value) 原子地减去值并返回更新后的值 |