1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.pool2.impl;
18
19 import java.util.concurrent.locks.Condition;
20 import java.util.concurrent.locks.ReentrantLock;
21
22 /**
23 * This sub-class was created to expose the waiting threads so that they can be
24 * interrupted when the pool using the queue that uses this lock is closed. The
25 * class is intended for internal use only.
26 * <p>
27 * This class is intended to be thread-safe.
28 * </p>
29 *
30 * @since 2.0
31 */
32 final class InterruptibleReentrantLock extends ReentrantLock {
33
34 private static final long serialVersionUID = 1L;
35
36 /**
37 * Constructs a new InterruptibleReentrantLock with the given fairness policy.
38 *
39 * @param fairness true means threads should acquire contended locks as if
40 * waiting in a FIFO queue
41 */
42 public InterruptibleReentrantLock(final boolean fairness) {
43 super(fairness);
44 }
45
46 /**
47 * Interrupts the threads that are waiting on a specific condition
48 *
49 * @param condition the condition on which the threads are waiting.
50 */
51 public void interruptWaiters(final Condition condition) {
52 getWaitingThreads(condition).forEach(Thread::interrupt);
53 }
54 }