Pattern::asPredicate 线程安全吗

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

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

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

此类的实例是不可变的,可以安全地供多个并发线程使用。Matcher 类的实例对于此类使用是不安全的。

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


慕哥6287543
浏览 251回答 2
2回答

PIPIONE

Matcher不是线程安全的但是Pattern是。关于asPredicate()您可以认为它是线程安全的,因为&nbsp;Patternjavadoc 类本身被定义为可以安全地供多个并发线程使用:此类的实例是不可变的,可以安全地供多个并发线程使用。Matcher 类的实例对于此类使用是不安全的。正如 Holger 强调的那样,Predicate返回的 byPattern.asPredicate()没有记录为线程安全的(反之亦然),但它的实现证明它是:public&nbsp;Predicate<String>&nbsp;asPredicate()&nbsp;{&nbsp; &nbsp;&nbsp;&nbsp;return&nbsp;s&nbsp;->&nbsp;matcher(s).find(); }Pattern.asPredicate()String只是另一种在 a与类似于 的模式&nbsp;之间进行匹配的方法Pattern.matcher(CharSequence).find()。这 :boolean&nbsp;isFound&nbsp;=&nbsp;pattern.matcher(myString).find();可以这样做:boolean&nbsp;isFound&nbsp;=&nbsp;pattern.asPredicate().test(myString);所以这里的新事物是您可以在流或任何接受谓词的方法中传递谓词。这使得意图更加清晰:不需要操纵 aPattern而是 a&nbsp;Predicate。Pattern&nbsp;pattern&nbsp;=&nbsp;...; ...stream().filter(o->&nbsp;pattern.matcher(o).find());可以替换为:Predicate<String> predicate = pattern.asPredicate();List<String> strings = ...;strings.stream().filter(predicate).(...);&nbsp;//orstrings.stream().filter(pattern.asPredicate()).(...);

牧羊人nacy

Matcher&nbsp;没有办法asPredicate;就是Pattern这样。因此,返回的Predicate也是线程安全的——它将作为新的&nbsp;Matcher返回,它将Predicate被构建——因为文档说它是不可变的。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java