You are right, the second thread is accesing the value of result set by the first thread.
If you are modifying a value that is visible to multiple threads, you should synchronize the operation.
public synchronized Integer calculateResult(int value1, int value2) {
result = value1 + value2;
return result;
}
This way the first thread to call the method gets a lock on the singleton, and the second thread can't access it until its finished.
You should probably review the official tutorials if you are going to use concurrency, especially this.