- 一直都不知道concurrenthashmap有什么实际的用处?先写个例子比较下hashmap和它。
- 方法用2000个线程下同一个key值,同步的话,应该最后的map的size为1,不同步可以大于1.Java Code1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31public class HashMapSyn {
public static void main(String[] args) throws InterruptedException {
System.out.println(runMapPutAndSizeShouldBe1(new HashMap<String, String>(32)));
System.out.println(runMapPutAndSizeShouldBe1(new ConcurrentHashMap<String, String>(32)));
}
public static int runMapPutAndSizeShouldBe1(final Map<String, String> map) throws InterruptedException {
Thread t = new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 2000; i++) {
new Thread(new Runnable() {
@Override
public void run() {
map.put("1", "1");
}
}, "Thread inside " + i).start();
}
}
}, "Thread outside");
t.start();
t.join();
return map.size();
}
@Test
public void testHashMapNotSynchronize() throws InterruptedException {
Assert.assertEquals(1, runMapPutAndSizeShouldBe1(new ConcurrentHashMap<String, String>(32)));
Assert.assertNotSame(1, runMapPutAndSizeShouldBe1(new HashMap<String, String>(32)));
}
} - 当然,hashmap的最后可能测不出来,可以将hashmap拷到本来加Thread.sleep。Java Code1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
/** add sleep for test*/
try { Thread.sleep(1); } catch (InterruptedException e1) {}
addEntry(hash, key, value, i);
return null;
}
- 浏览: 563393 次
- 性别:
- 来自: 北京
最新评论
-
zxjlwt:
路过素人派http://surenpi.com
SWT 树的事件 SWT.Selection SWT.CHECK SWT.DefaultSelection -
hj01kkk:
1楼用法正解
JDK 7 中的 Fork/Join 模式 -
fish_no7:
使用 new SortTask().fork()
JDK 7 中的 Fork/Join 模式 -
wpf523:
mark
Java 多线程例子6 线程安全 线程同步 同步代码块 同步函数 -
uniquejava:
以前碰到过,估计是在icu包中实现了双击自动选中一段文本的功能 ...
java.lang.NoClassDefFoundError: com/ibm/icu/text/BreakIterator
相关推荐
然而,`HashMap`并非线程安全,这意味着在多线程环境中直接使用`HashMap`可能会导致数据不一致、并发问题,甚至程序崩溃。本项目“hashmap-thread-test”显然是为了测试和展示这一特性。 ### Java HashMap 的特性 ...
此外,需要注意的是,`HashMap`并非线程安全的,如果在多线程环境下使用,应考虑同步机制,或使用如`ConcurrentHashMap`等线程安全的替代方案。同时,对于不允许null值的情况,可以选择`LinkedHashMap`或`TreeMap`等...
- **空键值支持**:`HashMap`允许使用`null`作为键和值,而`HashTable`不允许。 - **方法差异**:`HashMap`移除了`HashTable`中的`contains`方法,改为`containsKey`和`containsValue`。 - **性能**:`HashTable`的...
为了保证线程安全,可以使用`ConcurrentHashMap`,或者在同步代码块中使用`HashMap`。 2. 容量与负载因子:`HashMap`的容量是指桶的数量,初始容量为16,负载因子默认为0.75。当元素数量达到容量与负载因子的乘积时...
5. **MyISAM和InnoDB的区别**:MyISAM是MySQL早期的非事务型存储引擎,读取速度快,不支持行级锁定,适合读多写少的场景。InnoDB是事务型存储引擎,支持ACID特性,提供行级锁定,适合并发高、事务处理多的环境。 6....
在多线程环境中,HashMap不是线程安全的,因此可能需要使用ConcurrentHashMap或者在访问HashMap时加入同步控制,以避免数据冲突。 在实现这些功能时,我们需要注意以下几点最佳实践: 1. 数据验证:确保输入的数据...
- **迭代器**:`ConcurrentHashMap`支持失败快照迭代器,即在迭代过程中可以添加或删除元素,而`HashMap`不允许这样做。 - **性能**:在高并发场景下,`ConcurrentHashMap`通常比使用`Collections.synchronizedMap()...
25. **MySQL存储引擎**:如InnoDB支持事务,MyISAM不支持,还有Memory、Archive等,各有特点。 以上只是部分内容的概述,面试中可能还会涉及到其他主题,如异常处理、设计原则、数据库优化、网络编程等。深入理解...
Map接口的实现有HashMap、LinkedHashMap和ConcurrentHashMap等,其中HashMap在JDK7和JDK8中的实现有所不同,ConcurrentHashMap是线程安全的。 由于文档内容中有些错误,例如“servicorFrom”应该是“SurvivorFrom”...
`LRUCache`通常会包含一个内部类来维护一个双向链表,用于记录元素的访问顺序,同时配合哈希表(如`HashMap`或`ConcurrentHashMap`)来快速定位元素。当缓存满时,链表尾部的元素(即最近最少使用的元素)会被移除,...
- HashMap、HashTable、ConcurrentHashMap的工作原理 - LinkedList和ArrayList的性能比较 - 泛型的使用和限制 4. **多线程与并发**: - 线程的创建方式,同步机制(synchronized、volatile、Lock接口) - 死锁...
- Map接口:HashMap、TreeMap、ConcurrentHashMap的实现原理和使用场景。 - 泛型:理解泛型的边界、通配符以及类型擦除的概念。 - CopyOnWriteArrayList和CopyOnWriteArraySet:在高并发环境下的应用。 3. **...
- `HashMap` 和 `ConcurrentHashMap`:`HashMap` 非线程安全,适用于单线程环境;`ConcurrentHashMap` 是线程安全的,适合多线程环境。 - `HashSet` 和 `TreeSet`:`HashSet` 是无序且不保证元素顺序的,而 `...
- **`SerialVersionUID`的作用**:序列化ID用于验证序列化对象的版本一致性,如果在序列化和反序列化过程中`SerialVersionUID`不匹配,则会导致`InvalidClassException`异常。 - **影响序列化的因素**:包括对象的...
3. **集合框架**:Java集合框架包括List(ArrayList, LinkedList, Vector)、Set(HashSet, TreeSet)、Queue(LinkedList, PriorityQueue)以及Map(HashMap, TreeMap, ConcurrentHashMap)。面试中可能会要求解释...
- 数据结构选择:根据需求选择合适的数据结构,如HashMap、TreeMap、ConcurrentHashMap等。 - 方法内联、逃逸分析等JIT优化策略。 8. **JVM调优** 使用JDK自带的JVisualVM、jconsole等工具监控JVM状态,调整堆...
第六章则涵盖了Java并发容器,如ArrayList、LinkedList、HashMap以及并发优化的ConcurrentHashMap等,并解析了它们的内部实现,展示了大师级的设计思路。 第七章涉及Java原子操作类,如AtomicInteger、...
MyISAM不支持事务,但读取速度较快,适用于读多写少的场景。 11. **TCP的四次挥手** TCP连接关闭时,需要通过四次挥手释放连接,确保双方确认无数据遗留。 12. **HTTPS** HTTPS基于SSL/TLS协议,提供加密传输和...
1. **集合框架**:Java集合框架是管理对象集合的统一接口,包括List(如ArrayList、LinkedList)、Set(如HashSet、TreeSet)和Map(如HashMap、ConcurrentHashMap)。了解它们的特性和使用场景至关重要,例如...
HashMap和ConcurrentHashMap区别,ConcurrentHashMap线程安全吗,ConcurrentHashMap如何保证线程安全? - **知识点概述**:`ConcurrentHashMap`是线程安全的`HashMap`实现。 - **区别**: - `HashMap`不是线程安全...