在 Java 中,可以使用 Matcher 类的 reset() 方法进行重置以重用 Matcher 对象来执行与给定的输入字符串匹配的操作。下面是一个线程安全的示例:
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class ThreadSafeRegexMatcher {
private final Pattern pattern;
public ThreadSafeRegexMatcher(String regex) {
pattern = Pattern.compile(regex);
}
public synchronized boolean matches(String input) {
Matcher matcher = pattern.matcher(input);
return matcher.matches();
}
public synchronized String[] group(String input) {
Matcher matcher = pattern.matcher(input);
if (matcher.matches()) {
int groupCount = matcher.groupCount();
String[] groups = new String[groupCount];
for (int i = 0; i < groupCount; i++) {
groups[i] = matcher.group(i + 1);
}
return groups;
}
return null;
}
}
这里使用 synchronized 关键字来确保在同一时间内只有一个线程执行匹配操作,并且重用 Matcher 对象以提高性能。注意,这里采用的是“饿汉式”单例模式,也可以根据需要使用其他线程安全的单例模式。