ANTLR(v3.2)生成的Java解析器线程是否安全?
例如,在servlet请求处理程序中,我可以重用相同的解析器实例来解析请求体吗?请求可能出现在不同的线程上,因此必须以线程安全的方式进行解析。如果实例是线程安全的,我可以在每个请求中重用相同的实例;否则我必须汇集它们或创建新实例。 ANTLRv3 FAQ对线程安全没有提及。
有一个古老的(2000)jGuru question关于这一点,以及那里的答案,
通常这个问题真的在问,“我可以制作多个 同一个解析器的实例并解析多个输入流 同一时间?“
做出了错误的假设。
由于ANTLR常见问题解答中未提及,我认为解析器不线程安全。
答案 0 :(得分:6)
在ANTLR 3中,没有关于线程安全的保证。在ANTLR 4中,实例方法对于多线程操作是不安全的,但是您可以创建解析器的两个单独实例,并在多个线程上使用这些单独的实例。