0

是否可以节省:

    private static final String LUCENE_ESCAPE_CHARS = "[\\\\+\\-\\!\\(\\)\\:\\^\\]\\{\\}\\~\\*\\?]";
    private static final Pattern LUCENE_PATTERN = Pattern.compile(LUCENE_ESCAPE_CHARS);
    private static final String REPLACEMENT_STRING = "\\\\$0";

并在多线程环境(例如doGet()servlet)中使用以下内容?

String escaped = LUCENE_PATTERN.matcher(query).replaceAll(REPLACEMENT_STRING);

我现在主要关心的是增加额外的延迟(例如由于锁定)或出现错误的情况。

4

1 回答 1

8

的,它是Pattern对象是线程安全的,而Matcher对象不是。您可以与多个线程共享模式实例。

但不要Matcher在线程之间共享实例。

为模式引用 JavaDoc

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

于 2013-09-23T08:14:22.257 回答