Doesn't need to be a bad thing. I do the same thing in Multiverse on read/write conflicts and
other control flow like the retry or speculative execution failures. As long as you cache the
transaction, control flow through an exception the performance is very good. And in Multiverse
in most executions you are not likely to encounter these exceptions. So they only make up a
small percentage of the total number of executions.
In Multiverse ControlFlowErrors are cached by default.
I'm also looking at supporting continuations eventually. Atm the transaction is retried if it somehow
is obstructed by another thread even though it could have a chance to complete. So if you
could store the continuation and restore it later when the contention probably is solved,
stm performance could be improved (especially for long running transactions).
All depends of course on how efficient that continuation mechanism is implemented.
http://weblogs.java.net/blog/forax/archive/2009/11/19/holy-crap-jvm-has-coroutinecontinuationfiber-etc