scala.concurrent.stm.Ref

View

trait View [A] extends View[A] with View[A]

Ref.View provides access to the contents of a Ref without requiring that an implicit InTxn be available. When called from within the dynamic scope of a transaction, View's methods operate as part of that transaction. When there is no transaction active View's methods are still atomic, but only for the duration of the method call.

A mental model of View is that view.foo(args) acts like atomic { implicit t => view.ref.foo(args) }.

Linear Supertypes
View[A], View[A], AnyRef, Any
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. Hide All
  2. Show all
  1. View
  2. View
  3. View
  4. AnyRef
  5. Any
Visibility
  1. Public
  2. All

Abstract Value Members

  1. def await (f: (A) ⇒ Boolean): Unit

    Blocks until f(get) is true, in a manner consistent with the current context.

    Blocks until f(get) is true, in a manner consistent with the current context. Requires that the predicate be safe to reevaluate, and that f(x) == f(y) if x == y.

    v.await(f) is equivalent to

       atomic { implicit t =>
         if (!f(v.get)) retry
       }
    

    If you want to wait for a predicate that involves more than one Ref then use retry directly.

    f

    a predicate that is safe to evaluate multiple times.

    Attributes
    abstract
    Definition Classes
    View
  2. def compareAndSet (before: A, after: A): Boolean

    Equivalent to atomically executing (if (before == get) { set(after); true } else false), but may be more efficient, especially if there is no enclosing atomic block.

    Equivalent to atomically executing (if (before == get) { set(after); true } else false), but may be more efficient, especially if there is no enclosing atomic block.

    before

    a value to compare against the ref's contents using the value's == method.

    after

    a value to store if before was equal to the previous contents.

    returns

    true if before was equal to the previous value of the viewed Ref, false otherwise.

    Attributes
    abstract
  3. def compareAndSetIdentity [B <: A with AnyRef] (before: B, after: A): Boolean

    Equivalent to atomically executing (if (before eq get) { set(after); true } else false), but may be more efficient, especially if there is no enclosing atomic block.

    Equivalent to atomically executing (if (before eq get) { set(after); true } else false), but may be more efficient, especially if there is no enclosing atomic block.

    before

    a value to compare against the ref's contents using reference identity equality (eq).

    after

    a value to store if before was eq to the previous contents.

    returns

    true if before was eq to the previous value of the viewed Ref, false otherwise.

    Attributes
    abstract
  4. def get : A

    Performs an atomic read; equivalent to apply().

    Performs an atomic read; equivalent to apply().

    returns

    the value of the Ref as observed by the current context.

    Attributes
    abstract
    Definition Classes
    View
  5. def getAndTransform (f: (A) ⇒ A): A

    Atomically replaces the value v stored in the Ref with f(v), returning the old value.

    Atomically replaces the value v stored in the Ref with f(v), returning the old value. transform should be preferred if the return value is not needed, since it gives the STM more flexibility to avoid transaction conflicts.

    f

    a function that is safe to call multiple times, and safe to call later during any enclosing atomic block.

    returns

    the previous value of the viewed Ref.

    Attributes
    abstract
  6. def getWith [Z] (f: (A) ⇒ Z): Z

    Acts like ref.getWith(f) if there is an active transaction, otherwise just returns f(get).

    Acts like ref.getWith(f) if there is an active transaction, otherwise just returns f(get).

    f

    an idempotent function.

    returns

    the result of applying f to the value contained in ref.

    Attributes
    abstract
    Definition Classes
    View
  7. def ref : Ref[A]

    Returns a Ref that accesses the same memory location as this view.

    Returns a Ref that accesses the same memory location as this view. The returned Ref might be the original reference that was used to construct this view, or it might be a Ref that is equivalent (and ==) to the original.

    returns

    a Ref that accesses the same memory location as this view.

    Attributes
    abstract
    Definition Classes
    ViewViewView
  8. def relaxedGet (equiv: (A, A) ⇒ Boolean): A

    Acts like ref.relaxedGet(equiv) if there is an active transaction, otherwise just returns get.

    Acts like ref.relaxedGet(equiv) if there is an active transaction, otherwise just returns get.

    equiv

    an equivalence function that returns true if a transaction that observed the first argument will still complete correctly, where the second argument is the actual value that should have been observed.

    returns

    a value of the Ref, not necessary consistent with the rest of the reads performed by the active transaction, if any.

    Attributes
    abstract
    Definition Classes
    View
  9. def set (v: A): Unit

    Performs an atomic write; equivalent to update(v).

    Performs an atomic write; equivalent to update(v).

    Attributes
    abstract
    Definition Classes
    View
  10. def swap (v: A): A

    Works like set(v), but returns the old value.

    Works like set(v), but returns the old value. This is an atomic swap, equivalent to atomically performing a get followed by set(v).

    returns

    the previous value held by ref.

    Attributes
    abstract
  11. def transform (f: (A) ⇒ A): Unit

    Atomically replaces the value v stored in the Ref with f(v).

    Atomically replaces the value v stored in the Ref with f(v). Some Ref implementations may defer execution of f or call f multiple times to avoid transaction conflicts.

    f

    a function that is safe to call multiple times, and safe to call later during the enclosing atomic block, if any.

    Attributes
    abstract
  12. def transformAndGet (f: (A) ⇒ A): A

    Atomically replaces the value v stored in the Ref with f(v), returning the new value.

    Atomically replaces the value v stored in the Ref with f(v), returning the new value. transform should be preferred if the return value is not needed, since it gives the STM more flexibility to avoid transaction conflicts.

    f

    a function that is safe to call multiple times, and safe to call later during any enclosing atomic block.

    returns

    the new value of the viewed Ref.

    Attributes
    abstract
  13. def transformIfDefined (pf: PartialFunction[A, A]): Boolean

    Atomically replaces the value v stored in the Ref with pf(v) if pf.isDefinedAt(v), returning true, otherwise leaves the element unchanged and returns false.

    Atomically replaces the value v stored in the Ref with pf(v) if pf.isDefinedAt(v), returning true, otherwise leaves the element unchanged and returns false. pf.apply and pf.isDefinedAt might be invoked multiple times by the STM, and might be called later in any enclosing atomic block.

    pf

    a partial function that is safe to call multiple times, and safe to call later during any enclosing atomic block.

    returns

    pf.isDefinedAt(''v''), where ''v'' is the element held by this Ref on entry.

    Attributes
    abstract
  14. def tryAwait (timeout: Long, unit: TimeUnit = TimeUnit.MILLISECONDS)(f: (A) ⇒ Boolean): Boolean

    Blocks until f(get) is true and returns true, or returns false if the condition does not become true within within the specified timeout.

    Blocks until f(get) is true and returns true, or returns false if the condition does not become true within within the specified timeout.

    v.tryAwait(timeout)(f) is equivalent to

       atomic { implicit t =>
         f(v.get) || { retryFor(timeout) ; false }
       }
    
    timeout

    the maximum amount of time to wait, in units of unit.

    unit

    the units in which the timeout is measured, defaulting to milliseconds.

    f

    a predicate that is safe to evaluate multiple times.

    returns

    true if the predicate was satisfied, false if the wait timed out.

    Attributes
    abstract
    Definition Classes
    View
  15. def trySet (v: A): Boolean

    Performs an atomic write and returns true, or returns false.

    Performs an atomic write and returns true, or returns false. The STM implementation may choose to return false to reduce (not necessarily avoid) blocking. If no other threads are performing any transactional or atomic accesses then this method will succeed.

    Attributes
    abstract
    Definition Classes
    View

Concrete Value Members

  1. def != (arg0: AnyRef): Boolean

    Attributes
    final
    Definition Classes
    AnyRef
  2. def != (arg0: Any): Boolean

    Attributes
    final
    Definition Classes
    Any
  3. def ## (): Int

    Attributes
    final
    Definition Classes
    AnyRef → Any
  4. def *= (rhs: A)(implicit num: Numeric[A]): Unit

    Transforms the value stored in the Ref by multiplying it.

    Transforms the value stored in the Ref by multiplying it.

    Note: Implementations may choose to ignore the provided Numeric[A] instance if A is a primitive type.

    rhs

    the quantity by which to multiple the value of ref.

  5. def += (rhs: A)(implicit num: Numeric[A]): Unit

    Transforms the value stored in the Ref by incrementing it.

    Transforms the value stored in the Ref by incrementing it.

    Note: Implementations may choose to ignore the provided Numeric[A] instance if A is a primitive type.

    rhs

    the quantity by which to increment the value of ref.

  6. def -= (rhs: A)(implicit num: Numeric[A]): Unit

    Transforms the value stored in the Ref by decrementing it.

    Transforms the value stored in the Ref by decrementing it.

    Note: Implementations may choose to ignore the provided Numeric[A] instance if A is a primitive type.

    rhs

    the quantity by which to decrement the value of ref.

  7. def /= (rhs: A)(implicit num: Numeric[A]): Unit

    Transforms the value stored in ref by performing a division on it, throwing away the remainder if division is not exact for instances of type A.

    Transforms the value stored in ref by performing a division on it, throwing away the remainder if division is not exact for instances of type A. The careful reader will note that division is actually provided by Fractional[A] or Integral[A], it is not defined on Numeric[A]. To avoid compile-time ambiguity this method accepts a Numeric[A] and assumes that it can be converted at runtime into either a Fractional[A] or an Integral[A].

    Note: Implementations may choose to ignore the provided Numeric[A] instance if A is a primitive type.

    rhs

    the quantity by which to divide the value of ref.

  8. def == (arg0: AnyRef): Boolean

    Attributes
    final
    Definition Classes
    AnyRef
  9. def == (arg0: Any): Boolean

    Attributes
    final
    Definition Classes
    Any
  10. def apply (): A

    Performs an atomic read of the value in ref.

    Performs an atomic read of the value in ref. If an atomic block is active (see Txn.findCurrent) then the read will be performed as part of the transaction, otherwise it will act as if it was performed inside a new atomic block. Equivalent to get.

    returns

    the value of the Ref as observed by the current context.

    Definition Classes
    View
  11. def asInstanceOf [T0] : T0

    Attributes
    final
    Definition Classes
    Any
  12. def clone (): AnyRef

    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  13. def eq (arg0: AnyRef): Boolean

    Attributes
    final
    Definition Classes
    AnyRef
  14. def equals (arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  15. def finalize (): Unit

    Attributes
    protected[lang]
    Definition Classes
    AnyRef
    Annotations
    @throws()
  16. def getClass (): java.lang.Class[_]

    Attributes
    final
    Definition Classes
    AnyRef
  17. def hashCode (): Int

    Definition Classes
    AnyRef → Any
  18. def isInstanceOf [T0] : Boolean

    Attributes
    final
    Definition Classes
    Any
  19. def ne (arg0: AnyRef): Boolean

    Attributes
    final
    Definition Classes
    AnyRef
  20. def notify (): Unit

    Attributes
    final
    Definition Classes
    AnyRef
  21. def notifyAll (): Unit

    Attributes
    final
    Definition Classes
    AnyRef
  22. def synchronized [T0] (arg0: ⇒ T0): T0

    Attributes
    final
    Definition Classes
    AnyRef
  23. def toString (): String

    Definition Classes
    AnyRef → Any
  24. def update (v: A): Unit

    Performs an atomic write of the value in ref.

    Performs an atomic write of the value in ref. If an atomic block is active (see Txn.current) then the write will be performed as part of the transaction, otherwise it will act as if it was performed inside a new atomic block. Equivalent to set(v).

    Definition Classes
    View
  25. def wait (): Unit

    Attributes
    final
    Definition Classes
    AnyRef
    Annotations
    @throws()
  26. def wait (arg0: Long, arg1: Int): Unit

    Attributes
    final
    Definition Classes
    AnyRef
    Annotations
    @throws()
  27. def wait (arg0: Long): Unit

    Attributes
    final
    Definition Classes
    AnyRef
    Annotations
    @throws()

Inherited from View[A]

Inherited from View[A]

Inherited from AnyRef

Inherited from Any