gpt4 book ai didi

java - Pattern::asPredicate 线程安全吗

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:30:39 25 4
gpt4 key购买 nike

我正在检查 java 8 文档,我发现类 Pattern有方法 asPredicate .

我正在查看 StackOverflow,但没有发现任何与线程安全相关的内容。

我知道 Pattern 类是线程安全的,正如文档所说

Instances of this class are immutable and are safe for use by multiple concurrent threads. Instances of the Matcher class are not safe for such use.

但是,asPredicate 方法生成的 Predicate 会怎样呢?

最佳答案

Matcher 不是线程安全的,但 Pattern 是。
关于 asPredicate() 你可以认为它是线程安全的 Pattern javadoc class本身被定义为可以安全地供多个并发线程使用:

Instances of this class are immutable and are safe for use by multiple concurrent threads. Instances of the Matcher class are not safe for such use.

正如 Holger 强调的那样,Pattern.asPredicate() 返回的 Predicate 没有被记录为线程安全的(反之亦然),但它的实现证明了它是:

public Predicate<String> asPredicate() {
return s -> matcher(s).find();
}

Pattern.asPredicate() 只是另一种在 String 与模式之间进行匹配的方法,类似于 Pattern.matcher(CharSequence).find( )

这个:

boolean isFound = pattern.matcher(myString).find(); 

可以这样做:

boolean isFound = pattern.asPredicate().test(myString); 

所以这里的新事物是您可以在流中或任何接受谓词的方法中传递谓词。这使得意图更加清晰:不需要操作 Pattern,而是操作 Predicate

Pattern pattern = ...;
...stream().filter(o-> pattern.matcher(o).find());

可以替换为:

Predicate<String> predicate = pattern.asPredicate();
List<String> strings = ...;
strings.stream().filter(predicate).(...);
//or
strings.stream().filter(pattern.asPredicate()).(...);

关于java - Pattern::asPredicate 线程安全吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57002010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com