我是Java界的新手,我在探索ConcurrentHashMap应用程序接口时发现了这一点:
static final int DEFAULT_INITIAL_CAPACITY = 16;
static final float DEFAULT_LOAD_FACTOR = 0.75F;
static final int DEFAULT_CONCURRENCY_LEVEL = 16;
static final int MAXIMUM_CAPACITY = 1073741824;
static final int MAX_SEGMENTS = 65536;
static fina
我已经开始阅读Java concurrency in practice,但在继续阅读之前,我有一个需要解决的问题。
以这个代码为例。我用番石榴()来检索Lock。顺便说一句,我知道,正如番石榴文档所述,这类似于使用ConcurrentHashMap。
public Object getValue(final String input) {
final Lock inputLock = STRIPED.get(input);
try {
inputLock.lock();
Object value = VALUES.get(input);
if
我必须处理许多类,这些类用于在ConcurrentHashMap中存储数据,通常如下所示:
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.locks.ReentrantLock;
public class Data {
private ConcurrentHashMap<String, SomeObject> concurrentHashMap = new ConcurrentHashMap<String, SomeObject>();
priva
我试图理解ConcurrentHashMAP ( CHM )的实现,但它看起来在Java7和CHM的Jav8实现中有很大的不同,
1)我试图从第一个问题开始理解,为什么HashEntry最初是在Java7中引入的,为什么在JDK8中删除了它?
2)在CHM中定义表大小的因素是什么,是并发级别还是容量?
/**
* Stripped-down version of helper class used in previous version,
* declared for the sake of serialization compatibility
*/
static class Segm
在ConcurrentHashMap中,我们有基本上扩展了ReentrantLock的片段。
static final class Segment<K,V> extends ReentrantLock implements Serializable
这个ReentrantLock是否使用它的公平性属性?
public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}
因此,假设线程t1在ConcurrentHashMap的一个分区上具有读锁,另外两个线程t2和t
我想知道怎样才能做到以下几点
class MyCollection<E> implements Collection<E> {
@Nullable E findAndRemove(Predicate<E> predicate) {
for (E e : this) {
if (predicate.test(e)) {
remove(e);
return e;
}
}
return null;
我用ConcurrentHashMap和computeIfAbsent()方法编写了一个递归计算斐波纳契数的程序:
当我使用像8,9,10这样的小值时,程序工作得非常好,但是当10 to 20 程序的值增加时,程序就会陷入无穷无尽的循环,而不会停止。
public class Test {
static Map<Integer, Integer> concurrentMap = new ConcurrentHashMap<>();
public static void main(String[] args) {
System.out.
我有一个静态HashMap,它将缓存由唯一整数标识的对象;它将从多个线程访问。我将在不同的线程中运行多个HashmapUser类型的实例,每个实例都希望使用相同的HashMap (这就是为什么它是静态的)。
通常,HashmapUsers将从HashMap检索。虽然如果它是空的,但是它需要从数据库中填充。另外,在某些情况下,HashMap将被清除,因为它需要数据发生更改,并且需要重新填充。
所以,我只是让所有的互动与地图同步。但我不肯定这是安全的,聪明的,或者它对一个静态变量起作用。
下面这个线程的实现安全吗?有任何简化或以其他方式改进的建议吗?
public class HashmapUse
public class Test {
static ConcurrentHashMap<Integer, Integer> map = null;
final static ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
public static void open() {
lock.writeLock().lock();
try {
if (map != null) {
return;
}
map = new C
我有一个在Map中更新数据的线程和几个读取该数据的线程。现在我的代码看起来像这样:
public class Updater {
private ConcurrentMap<String, Integer> valuesMap = new ConcurrentHashMap<>();
private ReadWriteLock reentrantReadWriteLock = new ReentrantReadWriteLock();
public void update(Settings settings) {
reentra