一尘不染

Java Regex线程安全吗?

java

我有一个函数,该函数使用Pattern#compileMatcher来搜索字符串列表中的模式。

此函数用于多个线程。每个线程将在Pattern#compile创建线程时传递给的唯一模式。线程和模式的数量是动态的,这意味着我可以Pattern在配置期间添加更多s和线程。

synchronize如果使用正则表达式,是否需要在此函数上放一个?Java线程中的正则表达式安全吗?


阅读 946

收藏
2020-09-08

共1个答案

一尘不染

是的
,来自Pattern类的Java
API文档

此类(模式)的实例是不可变的,可以安全地由多个并发线程使用。Matcher类的实例不安全用于此类用途。

如果您正在查看以性能为中心的代码,请尝试使用reset()方法重置Matcher实例,而不是创建新实例。这将重置Matcher实例的状态,使其可用于下一个正则表达式操作。实际上,正是Matcher实例中维护的状态才使它对于并发访问不安全。

2020-09-08