- 浏览: 29147 次
- 性别:
- 来自: 北京
最新评论
ConcurrentHashMap中内部类Segment<K,V>的重要方法
重要方法:
a) static final <K,V> Segment<K,V>[] newArray(int i)
创建指定大小的Segment数组。
b) HashEntry<K,V> getFirst(int hash)
得到当前段指定槽位的第一个Entry。
c) V readValueUnderLock(HashEntry<K,V> e)
在加锁的状态下读取指定HashEntry的值。
d) V get(Object key, int hash)
得到指定key和hash码对应的value。先取得对应槽位的第一个Entry,在链表中迭代找到对应key的Entry,最后在加锁的状态下读取value。
e) boolean containsKey(Object key, int hash)
判断当前Segment中是否存在指定key和hash码的Entry。先取得对应槽位的第一个Entry,在链表中迭代找到对应key的Entry。
f) boolean containsValue(Object value)
判断当前Segment中是否存在指定value。循环table中的所有元素,然后到链表中迭代找出value,如果迭代过程中找到的value为会在加锁的情况下再次读出value。
g) boolean replace(K key, int hash, V oldValue, V newValue)
在加锁的状态下替换指定key、hash码和oldValue的元素的值为newValue,替换成功是返回true,否则返回false。
h) V replace(K key, int hash, V newValue)
在加锁的状态下替换指定key和hash码的元素的值为newValue,替换成功是返回true,否则返回false。
i) V put(K key, int hash, V value, boolean onlyIfAbsent)
在加锁的状态下插入指定的key、hash码、value。插入前会确认当前容量,如果超过阈值会调整table的大小。其中onlyIfAbsent为false时才替换已存在的值。
j) void rehash()
调整table的大小。调整后需要重新组织每个链表中的元素,如果原来的槽位上只有一个节点就直接把这个链表移到新的槽位;如果有多个节点,先把链表末端的节点移到新的槽位,然后把其余的节点克隆到新的槽位。旧的table的元素没有置空,交给垃圾收集机制去处理。
k) V remove(Object key, int hash, Object value)
删除一个节点,当value为null是只按key查找节点,反之按key和value查找节点。被删除节点下面的节点保持不变,前面的所有节点要重新生成(克隆)。
l) void clear()
在加锁的状态下,数组table的所有元素置null,同时设置count值为0。
重要方法:
a) static final <K,V> Segment<K,V>[] newArray(int i)
创建指定大小的Segment数组。
b) HashEntry<K,V> getFirst(int hash)
得到当前段指定槽位的第一个Entry。
c) V readValueUnderLock(HashEntry<K,V> e)
在加锁的状态下读取指定HashEntry的值。
d) V get(Object key, int hash)
得到指定key和hash码对应的value。先取得对应槽位的第一个Entry,在链表中迭代找到对应key的Entry,最后在加锁的状态下读取value。
e) boolean containsKey(Object key, int hash)
判断当前Segment中是否存在指定key和hash码的Entry。先取得对应槽位的第一个Entry,在链表中迭代找到对应key的Entry。
f) boolean containsValue(Object value)
判断当前Segment中是否存在指定value。循环table中的所有元素,然后到链表中迭代找出value,如果迭代过程中找到的value为会在加锁的情况下再次读出value。
g) boolean replace(K key, int hash, V oldValue, V newValue)
在加锁的状态下替换指定key、hash码和oldValue的元素的值为newValue,替换成功是返回true,否则返回false。
h) V replace(K key, int hash, V newValue)
在加锁的状态下替换指定key和hash码的元素的值为newValue,替换成功是返回true,否则返回false。
i) V put(K key, int hash, V value, boolean onlyIfAbsent)
在加锁的状态下插入指定的key、hash码、value。插入前会确认当前容量,如果超过阈值会调整table的大小。其中onlyIfAbsent为false时才替换已存在的值。
j) void rehash()
调整table的大小。调整后需要重新组织每个链表中的元素,如果原来的槽位上只有一个节点就直接把这个链表移到新的槽位;如果有多个节点,先把链表末端的节点移到新的槽位,然后把其余的节点克隆到新的槽位。旧的table的元素没有置空,交给垃圾收集机制去处理。
k) V remove(Object key, int hash, Object value)
删除一个节点,当value为null是只按key查找节点,反之按key和value查找节点。被删除节点下面的节点保持不变,前面的所有节点要重新生成(克隆)。
l) void clear()
在加锁的状态下,数组table的所有元素置null,同时设置count值为0。
发表评论
-
asdfasfd
2014-04-12 17:11 624http://www.laomaotao.net/?H9197 ... -
工木rrrr
2012-12-20 20:33 0工工工工工工工工 -
http://yiminghe.iteye.com/blog/291126
2011-10-13 18:04 0http://yiminghe.iteye.com/blog/ ... -
java.util.concurrent.Executors源码学习(三)
2011-02-01 11:43 1326Executors中的重要方法(续): 8. Schedu ... -
java.util.concurrent.Executors源码学习(二)
2011-02-01 11:41 1285Executors中的重要方法(续): 5. Executo ... -
java.util.concurrent.Executors源码学习(一)
2011-02-01 11:39 1772java.util.concurrent.Executors: ... -
java.util.concurrent.ExecutorService(二)
2011-02-01 11:37 1323ExecutorService中重要的方法(续): 6. ... -
java.util.concurrent.ExecutorService(一)
2011-02-01 11:36 2472java.util.concurrent.ExecutorSe ... -
java.util.concurrent.LinkedBlockingDeque源码学习(三)
2011-02-01 11:33 1261LinkedBlockingDeque中的重要方法(续): ... -
java.util.concurrent.LinkedBlockingDeque源码学习(二)
2011-02-01 11:32 1160LinkedBlockingDeque中的重要方法: 1. ... -
java.util.concurrent.LinkedBlockingDeque源码学习(一)
2011-02-01 11:30 2436java.util.concurrent.LinkedBloc ... -
java.util.concurrent.ConcurrentHashMap源码学习(三)
2011-02-01 11:27 1085ConcurrentHashMap中的内部类: 1. sta ... -
java.util.concurrent.ConcurrentHashMap源码学习(二)
2011-02-01 11:24 1179ConcurrentHashMap中重要的方法: 1. V ... -
java.util.concurrent.ConcurrentHashMap源码学习(一)
2011-02-01 11:22 2091java.util.concurrent.Concurrent ... -
java.util.LinkedHashMap源码学习(二)
2011-02-01 11:20 1496LinkedHashMap中重要的方法: 1. void c ... -
java.util.LinkedHashMap源码学习(一)
2011-02-01 11:19 1220java.util.LinkedHashMap: Linke ... -
java.util.HashMap源码学习(二)
2011-02-01 11:17 1012HashMap中重要的方法: 1. public V put ... -
java.util.HashMap源码学习(一)
2011-02-01 11:09 1137java.util.HashMap: table数组中存放的 ...
相关推荐
### Java并发工具包 `java.util.concurrent` 知识点详解 #### 一、引言 随着多核处理器的普及和应用程序复杂度的增加,多线程编程成为了现代软件开发不可或缺的一部分。为了简化并发编程的复杂性,Java 5 引入了 `...
java.util.concurrent 多线程框架 java.util.concurrent 多线程框架是 Java 语言中用于多线程编程的库。该库提供了多种线程池实现、并发集合、同步器、lock 等多种机制,以便开发者更方便地编写高效、可靠的多线程...
- [Java SE 8 文档](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html):提供了 `ConcurrentHashMap` 的官方 API 文档。 - [Doug Lea 的个人网站]...
Java并发工具包(java.util.concurrent)是Java平台上用于高效、安全地处理多线程编程的重要组件。这个包包含了丰富的并发工具类,旨在帮助开发者构建高度并发的程序,提高程序的性能和可伸缩性。本资源是该工具包的...
《Java Util Concurrent中文版》是Java并发编程领域的重要参考资料,主要涵盖了Java标准库中的`java.util.concurrent`包及其相关类和接口。这个包是Java多线程编程的核心,提供了高效、安全的并发工具,帮助开发者...
Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...
import java.util.concurrent.*; ConcurrentHashMap, String> bb = new ConcurrentHashMap(); bb.put("1", "wj"); bb.put("2", "ry"); for (String key : bb.keySet()) { bb.remove(key); } ``` 在编写多...
总之,`java.util.concurrent` 提供的工具使得并发编程变得更加容易和高效,是 Java 并发编程的基石,无论是对于初学者还是经验丰富的开发者,理解和掌握这个包都是非常重要的。通过熟练运用这些工具,开发者可以...
import java.util.concurrent.*; ConcurrentHashMap, String> bb = new ConcurrentHashMap(); // ... bb.remove(ele); // 直接使用 remove() 方法,无需担心并发修改异常 ``` 总的来说,避免 `java.util....
30. **`java.util.concurrent.ConcurrentHashMap`**:线程安全的哈希映射,提供高效并发操作。 以上30个工具类涵盖了Java开发中的各种常见需求,熟练掌握它们能显著提升编程效率和代码质量。在实际开发中,可以根据...
10. **`java.util.concurrent.*`**: 并发库,包括线程池、并发容器(如`ConcurrentHashMap`)、原子变量(如`AtomicInteger`)等。 11. **`java.io.File`**: 文件和目录操作,如创建、删除、读取文件信息。 12. **...
27. **`java.util.concurrent.ConcurrentHashMap`**:线程安全的哈希映射,用于高并发场景。 28. **`java.util.concurrent.CopyOnWriteArrayList`/`CopyOnWriteArraySet`**:线程安全的列表和集合,写操作时复制...
此外,`java.util.concurrent`包下的`ConcurrentHashMap`、`CopyOnWriteArrayList`等容器类,为并发编程提供了线程安全的数据结构。 在`DaemonThreadTest.java`这个文件中,可能涉及到了Java的守护线程(Daemon ...
4. **`java.util.concurrent`包**:这个包包含了线程安全的数据结构(如ConcurrentHashMap)和并发工具类,如ExecutorService、Semaphore、CyclicBarrier等,用于高效地处理多线程场景。 5. **`java.util.logging....
`java.util.concurrent`(JUC)包是Java标准库提供的一组强大的并发工具,它为开发者提供了丰富的类和接口,帮助简化并发编程。本用户指南将深入探讨这个包中的核心概念和主要类。 1. **线程池**: `java.util....
6. **并发工具类**:`java.util.concurrent`包扩展了`java.util`,提供了线程安全的数据结构和并发控制工具。虽然不在`java.util`包内,但与其紧密相关,如ConcurrentHashMap、AtomicInteger等。 7. **枚举(Enum)...
10. **`java.util.concurrent.*`**:并发工具类库,包括线程池`ExecutorService`、同步容器如`Semaphore`、`CountDownLatch`、`CyclicBarrier`等,以及原子类如`AtomicInteger`、`AtomicLong`,它们提供了高效的并发...