Java线程的ANTLR解析器是否安全?

djb*_*djb 4 antlr thread-safety

ANTLR(v3.2)生成的Java解析器线程是否安全?

例如,在servlet请求处理程序中,我可以重用相同的解析器实例来解析请求主体吗?请求可能出现在不同的线程上,因此必须以线程安全的方式进行解析.如果实例是线程安全的,我可以在每个请求中重用相同的实例; 否则我必须汇集它们或创建新实例.该ANTLRv3常见问题是线程安全沉默.

关于这个有一个古老的(2000)jGuru问题,那里的答案是,

通常这个问题实际上是在问:"我可以创建同一个解析器的多个实例并同时解析多个输入流吗?"

做出错误的假设.

由于在ANTLR FAQ中没有提到,我假设解析器不是线程安全的.

Sam*_*ell 6

在ANTLR 3中,不保证线程安全.在ANTLR 4中,实例方法对于多线程操作并不安全,但您可以创建解析器的两个单独实例,并在多个线程上使用这些单独的实例.