RefFactory
is responsible for creating concrete Ref
instances.
STMImpl
gathers all of the functionality required to plug an STM
implementation into scala.concurrent.stm
.
TxnContext
captures the implementation-specific functionality of locating
the InTxn
dynamically bound to the current Thread
.
TxnContext
captures the implementation-specific functionality of locating
the InTxn
dynamically bound to the current Thread
. Users should use the
lookup methods provided by object Txn
.
STMImpl
gathers all of the functionality required to plug an STM
implementation into scala.concurrent.stm
.
STMImpl
gathers all of the functionality required to plug an STM
implementation into scala.concurrent.stm
. Only one implementation can
be selected, because Ref
s and atomic blocks from different STM
implementations are not compatible. STMImpl.instance
returns the
STMImpl
instance that has been selected for this program execution.
There are two ways to explicitly select the STMImpl
instance:
STMImpl
; or 2. arrange for STMImpl.select
or STMImpl.trySelect
to be called
before any Ref
s are constructed and before any atomic blocks are
executed.
Setting the JVM system property "scala.stm.impl" is equivalent to making a
call to STMImpl.select(System.getProperty("scala.stm.impl"))
before any
other STMImpl
selections.
If there is no explicitly selected STMImpl
instance and the classpath
contains a class scala.concurrent.stm.impl.DefaultFactory
that extends
scala.concurrent.stm.impl.STMImpl.Factory
, then an instance of that
class will be instantiated and used to generate the STMImpl
instance.
ScalaSTM implementations are encouraged to implement DefaultFactory
so
that if a user includes the implementation's JAR file, it will be
automatically selected.
If no explicit selection has been made and there is no definition of
scala.concurrent.stm.impl.DefaultFactory
present in the classpath, then
ScalaSTM will fall back to the reference implementation
"scala.concurrent.stm.ccstm.CCSTM".
STMImpl
gathers all of the functionality required to plug an STM implementation intoscala.concurrent.stm
. See theSTMImpl
companion object for information on controlling whichSTMImpl
is selected at run time.