All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.cedarsoft.utils.MultiLock Maven / Gradle / Ivy

The newest version!
package com.cedarsoft.utils;

import org.jetbrains.annotations.NotNull;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;

/**
 * USE WITH CARE!!!
 * May easily result in dead locks
 */
public class MultiLock implements Lock {
  @NotNull
  private final List locks = new ArrayList();

  public MultiLock( @NotNull Lock... locks ) {
    this( Arrays.asList( locks ) );
  }

  public MultiLock( @NotNull Collection locks ) {
    this.locks.addAll( locks );
  }

  public void lock() {
    for ( Lock lock : locks ) {
      //noinspection LockAcquiredButNotSafelyReleased
      lock.lock();
    }
  }

  public void lockInterruptibly() throws InterruptedException {
    throw new UnsupportedOperationException( "Not supported for a multi lock" );
  }

  public boolean tryLock() {
    throw new UnsupportedOperationException( "Not supported for a multi lock" );
  }

  public boolean tryLock( long time, TimeUnit unit ) throws InterruptedException {
    throw new UnsupportedOperationException( "Not supported for a multi lock" );
  }

  public void unlock() {
    for ( Lock lock : locks ) {
      lock.unlock();
    }
  }

  public Condition newCondition() {
    throw new UnsupportedOperationException( "Cannot create a condition for a multi lock" );
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy