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