https://blog.devgenius.io/using-optimistic-locking-to-optimize-concurrent-operations-in-java-66791e507e23