是Java Regex线程安全吗?

我有一个函数,使用Pattern.compile和Matcher来搜索字符串列表的模式。此函数用于多线程。创建线程时,每个线程都将有一个传递给Pattern.compile的唯一模式。线程和模式的数量是动态的,这意味着我可以在配置期间添加更多的模式和线程。

如果使用正则表达式,我需要对此函数进行“同步”吗?在java线程中的regex是否安全?

TIA

最佳答案
是的,从Pattern class的Java API文档

Instances of this (Pattern) class are immutable and are safe for use by multiple concurrent threads. Instances of the Matcher class are not safe for such use.

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

转载注明原文:是Java Regex线程安全吗? - 代码日志