const classafConcurrent::Synchronized
sys::Obj afConcurrent::Synchronized
Provides synchronized access to blocks of code. Example usage:
lock := Synchronized(ActorPool())
val := lock.synchronized |->Obj?| {
// ...
// important stuff
// ...
return 69
}
- async
Runs the given func asynchronously, using this Synchronized's
ActorPool.Errs that occur within the block are logged but not rethrown unless you call
get()on the returnedFuture.The given func and return value must be immutable.
- inSync
Bool inSync()Returns
trueif the current thread is running inside the synchronised Actor. E.g.:lock := Synchronized(ActorPool()) lock.inSync
// --> falselock.synchronized |->| { lock.inSync// --> true... }- make
new make(ActorPool actorPool, Duration? timeout := null, |This? f := null)Create a
Synchronizedclass that uses the givenActorPooland timeout.The default timeout of
nullblocks forever.- reentrant
const Bool reentrant := trueDetermines if this synchronised lock is re-entrant or not. Re-entrant locks allow multiple nested calls to
synchronized()(on this object) without fear of deadlocks.Because re-entrant locks are often considered an indication of bad design, setting
reentranttofalsewill disable nested calls tosynchronized(), throwing an Err instead.Defaults to
true.- synchronized
This effectively wraps the given func in a Java
synchronized { ... }block and returns its calculated value.The given func and return value must be immutable.
- timeout
const Duration? timeoutThe default timeout to use when waiting for
synchronizedblocks to complete.The default timeout of
nullblocks forever.