5

ANTLR (v3.2) で生成された Java パーサー スレッドは安全ですか?

たとえば、サーブレット リクエスト ハンドラで、同じパーサー インスタンスを再利用してリクエスト ボディを解析できますか? リクエストは異なるスレッドで受信される可能性があるため、解析はスレッド セーフな方法で行う必要があります。インスタンスがスレッド セーフである場合、各リクエストで同じインスタンスを再利用できます。それ以外の場合は、それらをプールするか、新しいインスタンスを作成する必要があります。ANTLRv3のFAQは、スレッドの安全性について言及していません。

これに関する古代 (2000 年) のjGuru の質問とその回答があります。

通常、この質問は、「同じパーサーの複数のインスタンスを作成して、同時に複数の入力ストリームを解析できるか?」という質問です。

間違った仮定をします。

ANTLR FAQ には記載されていないので、パーサーはスレッドセーフではないと思います。

4

1 に答える 1

6

ANTLR 3 では、スレッドの安全性に関する保証はありません。ANTLR 4 では、インスタンス メソッドはマルチスレッド操作に対して安全ではありませんが、パーサーの 2 つの個別のインスタンスを作成し、それらの個別のインスタンスを複数のスレッドで使用することができます。

于 2013-10-12T00:31:25.280 に答える