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 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