小编boo*_*lan的帖子

int原语类型的volatile声明

我引用了Oracle关于Atomic Access的Java文档

  • 读取和写入对于引用变量和大多数原始变量(除long和double之外的所有类型)都是原子的.
  • 对于声明的所有变量volatile(包括长变量和双变量),读取和写入都是原子的.

我明白是怎么volatile运作的.但是提到volatile明确声明for longdouble变量以在第二个语句中获得原子访问的要求,是在第一个语句中volatile为引用变量和大多数原始变量(除long和double之外的所有类型)声明可选.

但我看到的代码使用原始类型的显式volatile声明int来实现原子访问; 而不这样做不保证原子访问.

int variable1;          // no atomic access
volatile int variable2; // atomic access
Run Code Online (Sandbox Code Playgroud)

我错过了什么吗?

java concurrency atomic volatile

10
推荐指数
2
解决办法
324
查看次数

在java.util.stream.Stream接口的两个收集方法中,其中一个构造不良?

在java.util.stream.Stream接口中,

<R> R collect(Supplier<R> supplier,
              BiConsumer<R, ? super T> accumulator,
              BiConsumer<R, R> combiner);
Run Code Online (Sandbox Code Playgroud)

组合器是a BiConsumer<R, R>,而在

<R, A> R collect(Collector<? super T, A, R> collector);
Run Code Online (Sandbox Code Playgroud)

组合器是一个BinaryOperator<A>只是一个BiFunction<A,A,A>.

虽然后面的形式清楚地定义了组合后组合对象的参考,但前一种形式却没有.

那么任何Stream实现库如何知道,前一种情况下的组合对象是什么?

java java-8 java-stream collectors

9
推荐指数
1
解决办法
234
查看次数

java.util.LinkedList() 如何成为 MutableList 的实例?

下面的代码如何编译才不会出现错误?

var linkedList: MutableList<Int> = java.util.LinkedList()
Run Code Online (Sandbox Code Playgroud)

java.util.LinkedList类契约显然没有实现 Kotlin 接口时MutableList

java linked-list kotlin mapped-types mutablelist

1
推荐指数
1
解决办法
95
查看次数