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()また、サーブレットのようなマルチスレッド環境で以下を利用しますか?

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

私の主な関心事は、追加の遅延 (ロックなどによる) を追加するか、バグが発生する状況になることです。

4

1 に答える 1

8

はいPatternオブジェクトはスレッドセーフであり、Matcherオブジェクトは安全ではありません。パターン インスタンスを複数のスレッドで共有できます。

Matcherただし、スレッド間でインスタンスを共有しないでください。

パターンの JavaDoc の引用

このクラスのインスタンスは不変であり、複数の同時スレッドで安全に使用できます。Matcherクラスのインスタンスは、そのような使用には安全ではありません。

于 2013-09-23T08:14:22.257 に答える