BonecP 소스 - BonecP에 사용되는 대기열
3622 단어 bonecp
TransferQueue<ConnectionHandle> connectionHandles;
public interface TransferQueue<E> extends BlockingQueue<E> {
}
if (config.getMaxConnectionsPerPartition() == config.getMinConnectionsPerPartition()){
// if we have a pool that we don't want resized, make it even faster by ignoring
// the size constraints.
connectionHandles = queueLIFO ? new LIFOQueue<ConnectionHandle>() : new LinkedTransferQueue<ConnectionHandle>();
} else {
connectionHandles = queueLIFO ? new LIFOQueue<ConnectionHandle>(this.config.getMaxConnectionsPerPartition()) : new BoundedLinkedTransferQueue<ConnectionHandle>(this.config.getMaxConnectionsPerPartition());
}
queueLIFO가 설정되어 있으면 LIFOQueue 대기열을 사용하고 이 대기열은 LinkedBlockingDeque를 계승합니다.
public class LIFOQueue<E> extends LinkedBlockingDeque<E> implements TransferQueue<E>{
}
FIFOQueue는 부류의 API를 빌려 TransferQueue 인터페이스를 실현하고 해당하는 방법을 다시 써서 FIFO 대기열에서 LIFO 대기열로 바뀌었다.
LinkedBlockingDeque
그것은 양방향 양단 체인표를 바탕으로 헤드 노드와 꼬리 노드의 인용을 가지고 있다.노드(Node)는 대기열 요소를 저장하는 최소 단위이며 이전 노드와 다음 노드의 참조를 포함하는 정적 내부 클래스입니다.
static final class Node<E> {
E item;
Node<E> prev;
Node<E> next;
Node(E x) {
item = x;
}
}
이 대기열은 고정된 용량을 가지고 있으며, 구성할 때 용량을 지정하면 더 많은 요소를 삽입할 수 없습니다. 용량 필드인capacity는final 수식자를 가지고 있으며, 용량의 상한선을 예측할 수 없으면 기본 구조 방법을 사용하여 Integer를 사용할 수 있습니다.MAX_용량 값으로 VALUE:
/** Maximum number of items in the deque */
private final int capacity;
public LinkedBlockingDeque() {
this(Integer.MAX_VALUE);
}
public LinkedBlockingDeque(int capacity) {
if (capacity <= 0) throw new IllegalArgumentException();
this.capacity = capacity;
}
큐는 하나의 ReentrantLock 객체와 두 개의 Condition 객체를 통해 동기화 및 차단을 수행합니다(Condition 사용.
/** Main lock guarding all access */
final ReentrantLock lock = new ReentrantLock();
/** Condition for waiting takes */
private final Condition notEmpty = lock.newCondition();
/** Condition for waiting puts */
private final Condition notFull = lock.newCondition();
config가 설정되어 있으면.getMaxConnectionsPerPartition() == config.getMinConnectionsPerPartition () 은 LinkedTransferQueue 를 사용하고, 그렇지 않으면 BoundedLinkedTransferQueue를 사용합니다.
Bounded Linked Transfer Queue는 Linked Transfer Queue를 계승하여 용량 제한을 통해 이 종류의'유계(bounded)'버전을 실현하였다.그것은 원자 변수java를 사용했다.util.concurrent.atomic.AtomicInteger는 체인 테이블의 크기를 저장합니다.그리고 Offer 메서드에서 ReentrantLock의 lock 메서드를 호출합니다.
/** No of elements in queue. */
private AtomicInteger size = new AtomicInteger();
/** bound of queue. */
private final int maxQueueSize;
/** Main lock guarding all access */
private final ReentrantLock lock = new ReentrantLock();
public BoundedLinkedTransferQueue(int maxQueueSize){
this.maxQueueSize = maxQueueSize;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
BonecP 연결 풀과 Spring의 @Transactional 구성Bonecp라는 연결 탱크의 성능이 DBCP와 C3P0의 성능보다 좋다는 말을 듣고 나는 새로운 프로젝트를 건설하여 MySQL을 연결하는 것을 테스트했다. 25배 빠르다고 하는데 시간이 있으면 측정해 봐야겠어요. 1...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.