android/guava/src/com/google/common/util/concurrent/Striped.java
public static Striped<Semaphore> lazyWeakSemaphore(int stripes, final int permits) {
    return lazy(
        stripes,
        new Supplier<Semaphore>() {
          @Override
          public Semaphore get() {
            return new Semaphore(permits, false);
          }
        });
  }
public static Striped<Semaphore> lazyWeakSemaphore(int stripes, final int permits) {
    return lazy(
        stripes,
        new Supplier<Semaphore>() {
          @Override
          public Semaphore get() {
            return new Semaphore(permits, false);
          }
        });
  }
Creates a {@code Striped<Semaphore>} with lazily initialized, weakly referenced semaphores,
with the specified number of permits.

@param stripes the minimum number of stripes (semaphores) required
@param permits the number of permits in each semaphore
@return a new {@code Striped<Semaphore>}