/** * Acquires in shared mode, aborting if interrupted. Implemented by first * checking interrupt status, then invoking at least once * {@link #tryAcquireShared}, returning on success. Otherwise the thread is * queued, possibly repeatedly blocking and unblocking, invoking * {@link #tryAcquireShared} until success or the thread is interrupted. * * @param arg * the acquire argument. This value is conveyed to * {@link #tryAcquireShared} but is otherwise uninterpreted and can * represent anything you like. * @throws InterruptedException * if the current thread is interrupted */ public final void acquireSharedInterruptibly(int arg, Object id) throws InterruptedException { if (Thread.interrupted()) throw new InterruptedException(); if (tryAcquireShared(arg, id) < 0) doAcquireSharedInterruptibly(arg, id); }