Open
Description
Hi
Please consider the case when several instances of Parser call the parse method, at the same time, each one from a different thread.
public ExpressionNode parse(String expression)
{
Tokenizer tokenizer = Tokenizer.getExpressionTokenizer(); // <---
tokenizer.tokenize(expression);
LinkedList<Token> tokens = tokenizer.getTokens();
return this.parse(tokens);
}
public static Tokenizer getExpressionTokenizer()
{
if (expressionTokenizer == null)
expressionTokenizer = createExpressionTokenizer();
return expressionTokenizer;
}
As expressionTokenizer is static, every thread would share the tokenizer, which could eventually lead to failure.
This might solve the issue:
public ExpressionNode parse(String expression)
{
Tokenizer tokenizer = Tokenizer.createExpressionTokenizer(); // <---
tokenizer.tokenize(expression);
LinkedList<Token> tokens = tokenizer.getTokens();
return this.parse(tokens);
}
Metadata
Metadata
Assignees
Labels
No labels