Java并发编程中的数据结构与同步工具
1. 累加器类
1.1 DoubleAdder类
DoubleAdder类没有 increment()
和 decrement()
方法。
1.2 LongAccumulator和DoubleAccumulator类
这两个类相似,但有一个重要区别。它们的构造函数需要指定两个参数:
- 内部计数器的初始值。
- 用于将新值累加到累加器的函数。
注意,该函数不能依赖于累加顺序。这两个类最重要的方法有:
- accumulate()
:接收一个长整型值作为参数,将该函数应用于当前值和参数,以增加或减少计数器。
- get()
:返回计数器的当前值。
示例代码如下:
LongAccumulator accumulator=new LongAccumulator((x,y) -> x*y, 1);
IntStream.range(1, 10).parallel().forEach(x -> accumulator.accumulate(x));
System.out.println(accumulator.get());
在累加器中使用了可交换操作,因此任何输入顺序的结果都相同。
2. 同步机制
2.1 同步类型
在并发应用程序中,