Package org.eclipse.net4j.util.concurrent

## Interface IRWLockManager<OBJECT,​CONTEXT>

- All Known Subinterfaces:
    `IRWOLockManager<OBJECT,​CONTEXT>`
  All Known Implementing Classes:
    `RWLockManager`, `RWOLockManager`

      public interface IRWLockManager<OBJECT,​CONTEXT>

  Support Multiple reads/no write and upgrade lock from read to write. Many context could request `write` lock at the same time. It will privileges first context that has already a `read` lock. If no one has any read lock, it's "first come first serve".
  Since:
    3.0
  Author:
    Eike Stepper

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Interface | Description
    --- | --- | ---
    `static class` | `IRWLockManager.LockType` |

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `static int` | `NO_WAIT` |
    `static int` | `WAIT` |

  - ### Method Summary

    All Methods Instance Methods Abstract Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `boolean` | `hasLock​(IRWLockManager.LockType type, CONTEXT context, OBJECT objectToLock)` |
    `boolean` | `hasLockByOthers​(IRWLockManager.LockType type, CONTEXT context, OBJECT objectToLock)` |
    `void` | `lock​(IRWLockManager.LockType type, CONTEXT context, java.util.Collection<? extends OBJECT> objectsToLock, long timeout)` |
    `void` | `lock​(IRWLockManager.LockType type, CONTEXT context, OBJECT objectToLock, long timeout)` |
    `void` | `unlock​(CONTEXT context)` | Attempts to release all locks(read and write) for a given context.
    `void` | `unlock​(IRWLockManager.LockType type, CONTEXT context, java.util.Collection<? extends OBJECT> objectsToUnlock)` | Attempts to release for a given locktype, context and objects.

- - ### Field Detail

    - #### WAIT

          static final int WAIT

      See Also:
        Constant Field Values

    - #### NO_WAIT

          static final int NO_WAIT

      See Also:
        Constant Field Values

  - ### Method Detail

    - #### lock

          void lock​(IRWLockManager.LockType type,
                    CONTEXT context,
                    java.util.Collection<? extends OBJECT> objectsToLock,
                    long timeout)
             throws java.lang.InterruptedException

      Throws:
        `java.lang.InterruptedException`

    - #### lock

          void lock​(IRWLockManager.LockType type,
                    CONTEXT context,
                    OBJECT objectToLock,
                    long timeout)
             throws java.lang.InterruptedException

      Throws:
        `java.lang.InterruptedException`

    - #### unlock

          void unlock​(IRWLockManager.LockType type,
                      CONTEXT context,
                      java.util.Collection<? extends OBJECT> objectsToUnlock)

      Attempts to release for a given locktype, context and objects.
      Throws:
        `java.lang.IllegalMonitorStateException` - Unlocking objects without lock.

    - #### unlock

          void unlock​(CONTEXT context)

      Attempts to release all locks(read and write) for a given context.

    - #### hasLock

          boolean hasLock​(IRWLockManager.LockType type,
                          CONTEXT context,
                          OBJECT objectToLock)

    - #### hasLockByOthers

          boolean hasLockByOthers​(IRWLockManager.LockType type,
                                  CONTEXT context,
                                  OBJECT objectToLock)