(Quick Reference)
Running a piece of code atomically
import groovyx.gpars.stm.GParsStm
import org.multiverse.api.references.IntRef
import static org.multiverse.api.StmUtils.newIntRefpublic class Account {
private final IntRef amount = newIntRef(0); public void transfer(final int a) {
GParsStm.atomic {
amount.increment(a);
}
} public int getCurrentAmount() {
GParsStm.atomicWithInt {
amount.get();
}
}
}
Customizing the transactional properties
import groovyx.gpars.stm.GParsStm
import org.multiverse.api.AtomicBlock
import org.multiverse.api.PropagationLevelfinal AtomicBlock block = GParsStm.createAtomicBlock(maxRetries: 3000, familyName: 'Custom', PropagationLevel: PropagationLevel.Requires, interruptible: false)
assert GParsStm.atomicWithBoolean(block) {
true
}