org.eclipse.aether

## Interface SyncContext

- All Superinterfaces:
    AutoCloseable, Closeable

      public interface SyncContext
      extends Closeable

  A synchronization context used to coordinate concurrent access to artifacts or metadatas. The typical usage of a synchronization context looks like this:

       SyncContext syncContext = repositorySystem.newSyncContext( ... );
       try {
           syncContext.acquire( artifacts, metadatas );
           // work with the artifacts and metadatas
       } finally {
           syncContext.close();
       }

  Within one thread, synchronization contexts may be nested which can naturally happen in a hierarchy of method calls. The nested synchronization contexts may also acquire overlapping sets of artifacts/metadatas as long as the following conditions are met. If the outer-most context holding a particular resource is exclusive, that resource can be reacquired in any nested context. If however the outer-most context is shared, the resource may only be reacquired by nested contexts if these are also shared.

  A synchronization context is meant to be utilized by only one thread and as such is not thread-safe.

  Note that the level of actual synchronization is subject to the implementation and might range from OS-wide to none.

  See Also:
    `RepositorySystem.newSyncContext(RepositorySystemSession, boolean)`

- - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `acquire(Collection<? extends Artifact> artifacts, Collection<? extends Metadata> metadatas)` Acquires synchronized access to the specified artifacts and metadatas.
    `void` | `close()` Releases all previously acquired artifacts/metadatas.

- - ### Method Detail

    - #### acquire

          void acquire(Collection<? extends Artifact> artifacts,
                     Collection<? extends Metadata> metadatas)

      Acquires synchronized access to the specified artifacts and metadatas. The invocation will potentially block until all requested resources can be acquired by the calling thread. Acquiring resources that are already acquired by this synchronization context has no effect. Please also see the class-level documentation for information regarding reentrancy. The method may be invoked multiple times on a synchronization context until all desired resources have been acquired.
      Parameters:
        `artifacts` - The artifacts to acquire, may be `null` or empty if none.
        `metadatas` - The metadatas to acquire, may be `null` or empty if none.

    - #### close

          void close()

      Releases all previously acquired artifacts/metadatas. If no resources have been acquired before or if this synchronization context has already been closed, this method does nothing.
      Specified by:
        `close` in interface `AutoCloseable`
      Specified by:
        `close` in interface `Closeable`

Copyright © 2010-2013 The Eclipse Foundation. All Rights Reserved.