org.elasticsearch.common.util.concurrent.ConcurrentCollections Maven / Gradle / Ivy
The newest version!
/*
* Licensed to Elasticsearch under one or more contributor
* license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright
* ownership. Elasticsearch licenses this file to you under
* the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.elasticsearch.common.util.concurrent;
import java.util.Deque;
import java.util.Queue;
import java.util.Set;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentLinkedDeque;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.LinkedTransferQueue;
import com.google.common.collect.Sets;
/**
*
*/
public abstract class ConcurrentCollections {
private final static boolean useLinkedTransferQueue = Boolean.parseBoolean(System.getProperty("es.useLinkedTransferQueue", "false"));
static final int aggressiveConcurrencyLevel;
static {
aggressiveConcurrencyLevel = Math.max(Runtime.getRuntime().availableProcessors() * 2, 16);
}
/**
* Creates a new CHM with an aggressive concurrency level, aimed at high concurrent update rate long living maps.
*/
public static ConcurrentMap newConcurrentMapWithAggressiveConcurrency() {
return new ConcurrentHashMap<>(16, 0.75f, aggressiveConcurrencyLevel);
}
public static ConcurrentMap newConcurrentMap() {
return new ConcurrentHashMap<>();
}
/**
* Creates a new CHM with an aggressive concurrency level, aimed at highly updateable long living maps.
*/
public static ConcurrentMapLong newConcurrentMapLongWithAggressiveConcurrency() {
return new ConcurrentHashMapLong<>(ConcurrentCollections.newConcurrentMapWithAggressiveConcurrency());
}
public static ConcurrentMapLong newConcurrentMapLong() {
return new ConcurrentHashMapLong<>(ConcurrentCollections.newConcurrentMap());
}
public static Set newConcurrentSet() {
return Sets.newSetFromMap(ConcurrentCollections.newConcurrentMap());
}
public static Queue newQueue() {
if (useLinkedTransferQueue) {
return new LinkedTransferQueue<>();
}
return new ConcurrentLinkedQueue<>();
}
public static Deque newDeque() {
return new ConcurrentLinkedDeque<>();
}
public static BlockingQueue newBlockingQueue() {
return new LinkedTransferQueue<>();
}
private ConcurrentCollections() {
}
}