将 LongPredicate(或类似)声明为私有静态而不是非静态 class 变量时的任何并发问题

Any concurrency issues in declaring a LongPredicate (or similar) as private static instead of non-static class variable

我已将 LongPredicate 声明为:

private LongPredicate isAboveZero = id -> id > 0L;

因为这是一个非捕获 lambda 不是更好地声明它为 static 吗?

另外,声明static时,如果被多线程访问或者并行使用会不会有并发问题streams

如果您查看 specification on Lambda expressions,您会得到以下信息:

A lambda expression is like a method: ...

Evaluation of a lambda expression produces an instance of a functional interface.

这意味着你基本上得到了一个匿名 class 实现 LongPredicate 并且因为那个 class 只有一个方法并且没有状态它是线程安全的 - 除非该方法正在做非- 线程安全的东西,在您发布的表达式中不是这种情况。

这意味着可以将对 class 实例的引用存储在静态变量中。但是,您可能还希望将 isAboveZero 设置为最终版本,这样它就不会在运行时被替换(另请参阅我的评论)。