- 浏览: 238641 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
mhsjlove:
正则表达式的捕获组比这好用多了
高效率分离字符串到一个Map中 -
yk0025:
正在研究中。。。
Antx学习总结 -
asialee:
博主这块写的挺好的,我完全看了,不过我也写了一些关于编解码器的 ...
Netty源代码框架剖析( 二 ) -
he_wen:
不能够停止tomcat的话 kill -9 进程号 得到进程 ...
检查tomcat是否宕机 -
zhangyou1010:
catalina.sh stop 如果这个不能停止tomc ...
检查tomcat是否宕机
本文章主要是控制HashMap权限如:设置一把锁(这里实现是通过一个布尔值locked)目的是想控制HashMap是否可以添加数据?是否可以清除数据?是否可以复制所有数据给另外一个HashMap? 如果布尔值为true,那么以上的操作都会报出异常。。。。
该类的名字叫做ParameterMap,它继承了HashMap类 。
请看下面的代码:
代码就不需要解释,因为里面已经解释的很详细,读者自己可以运行该程序。。。。
package ex09.pyrmont.startup; import java.util.HashMap; import java.util.Map; /** *第一次创建ParmaterMap实例是没有锁。 *该类继承了HashMap,包含了一个locked成员变量 * @author Jerry */ public final class LockedMap extends HashMap { // ----------------------------------------------------------- 构造函数 /** * 构造一个新的map,容量是默认值,加载因子也是默认值 */ public LockedMap() { super(); } /** * 构造一个新的map,容量值是一个具体的初始容量,加载因子是默认值 * * @param initialCapacity 这个map的初始容量 */ public LockedMap(int initialCapacity) { super(initialCapacity); } /** * 构造一个新的map,容量值是一个具体的初始容量,加载因子是loadeFactor * * @param initialCapacity 这个map的初始容量 * @param loadFactor 这个map的加载因子 */ public LockedMap(int initialCapacity, float loadFactor) { super(initialCapacity, loadFactor); } /** * 复制一个map,给新的map * * @param map Map的类容复制到新的Map中 */ public LockedMap(Map map) { super(map); } // ------------------------------------------------------------- 类的成员变量 /** * 这个Map当前锁的状态 */ private boolean locked = false; //------------------------------------------------------------get和set方法 /** * Return 这个map锁的状态. */ public boolean isLocked() { return (this.locked); } /** * 设置这个map锁的状态 * * @param locked 一个新锁的状态 */ public void setLocked(boolean locked) { this.locked = locked; } // --------------------------------------------------------- Public Methods /** * 移除这个map的所有键值对. * * @exception IllegalStateException 如果这个Map被锁住 */ public void clear() { if (locked) throw new IllegalStateException ("LockedMap.locked"); super.clear(); } /** * 在这个Map中具体的值与具体的键相关联。如果Map里面种包含了这个key,那么旧值就会被 * 替换 * * @param key Key是与具体的值相关联 * @param value 值必须与具体的key相关联 * * @return 具体key与之关联的value * * @exception IllegalStateException 如果这个Map被锁住 */ public Object put(Object key, Object value) { if (locked) throw new IllegalStateException ("LockedMap.locked"); return (super.put(key, value)); } /** * 把指定的map中的所有键值对复制到这个map中 * * @param map 所有的键值对存放在这个map中 * * @exception IllegalStateException 如果这个Map被锁住 */ public void putAll(Map map) { if (locked) throw new IllegalStateException ("LockedMap.locked"); super.putAll(map); } /** * 如果存在就会移除key相关联的value值. * * @param key * * @exception IllegalStateException 如果这个Map被锁住 */ public Object remove(Object key) { if (locked) throw new IllegalStateException ("LockedMap.locked"); return (super.remove(key)); } }
评论
22 楼
angel243fly
2010-12-12
这个扩展hashmap估计用处不大吧
21 楼
he_wen
2010-12-10
对,tomcat源代码是这样做的,怪我没有讲清
20 楼
hardPass
2010-12-10
我终于搞明白了这个map的用途了。
就是说,把参数解析好,放入map后,就不允许修改这个map了。
是不是这个意思?
就是说,把参数解析好,放入map后,就不允许修改这个map了。
是不是这个意思?
19 楼
sunce
2010-12-09
的确,单纯控制访问,应用代理模式就OK了,
18 楼
rplees
2010-12-09
在我印象中,锁这个东东应该会跟synchronized挂钩。
17 楼
dwangel
2010-12-09
如果想得到一个不能修改 的Map,还是建议用
Collections.unmodifiableMap(originMap);
如果传递出去的map中途还需要修改,那只能说整体设计有点问题了。
Collections.unmodifiableMap(originMap);
如果传递出去的map中途还需要修改,那只能说整体设计有点问题了。
16 楼
hardPass
2010-12-09
he_wen 写道
这个类没有考虑线程安全问题,因为HashMap本来就是线程不安全。我主要做的就是限制HashMap值的操作。在Tomcat源码中就是这样做的,因为Servlet获取请求信息如:request.getParameterMap()时候,刚刚开始Tomcat是不会马上把字符串解析出来,而是存放字符串,只有用户调用了函数的时候它才会解析,在存放到HashMap中。。。呵呵。。。可能起的名字有误会,希望大家见谅!!!刚刚开始写博客有很多地方请指教
请问这个跟加lock有什么关系呢?
我老笨呢,想了半天没想明白。
15 楼
whaosoft
2010-12-09
LZ大学专业是计算机吗?
14 楼
snake1987
2010-12-09
有点像struts例的freeze
不过说真的,这题目真的……
不过说真的,这题目真的……
13 楼
http4j
2010-12-09
aabcc 写道
http4j 写道
我不觉得这个类很二, 楼主扩展的是HashMap,又不是ConcurrentHashMap,要那么多同步锁或者AtomicBoolean,未必适合楼主的场景。不理解说二的人都怎么想的?
lz提到了锁,但是既没有 同步块也没有lock-free算法
很容易让人误解啊,后面LZ的解释我算是明白一点点了
这个其实是 LZ看 How Tomcat works 得到的例子吧? 这个明显是 Tomcat的Custom解决方法,只适合TOMCAT的某场景
个人觉得不太适合作为一个 编程方法来让大家学习
这个楼主有责任,只不过说人家二的人明显没仔细看帖子,就上来攻击了。
楼主所说的所明显是控制访问用的,而不是多线程概念里的同步锁。
12 楼
he_wen
2010-12-09
谢谢大家的回复,我当初是看了 How Tomcat works后,看到这个类比较好,才展示给大家看看,如果有不对的地方请大家多多指教。。。
11 楼
hhhhkkkk
2010-12-09
个人看法,不要继承,可以Decorator或Proxy一个map类,这样灵活多了,还可以根据策略或其它方式封装不同的map实例,以实现有序,同步等功能。
10 楼
Wallian_hua
2010-12-09
其实我不是说楼主,确实有点。。。。
9 楼
aabcc
2010-12-09
http4j 写道
我不觉得这个类很二, 楼主扩展的是HashMap,又不是ConcurrentHashMap,要那么多同步锁或者AtomicBoolean,未必适合楼主的场景。不理解说二的人都怎么想的?
lz提到了锁,但是既没有 同步块也没有lock-free算法
很容易让人误解啊,后面LZ的解释我算是明白一点点了
这个其实是 LZ看 How Tomcat works 得到的例子吧? 这个明显是 Tomcat的Custom解决方法,只适合TOMCAT的某场景
个人觉得不太适合作为一个 编程方法来让大家学习
8 楼
http4j
2010-12-09
我不觉得这个类很二, 楼主扩展的是HashMap,又不是ConcurrentHashMap,要那么多同步锁或者AtomicBoolean,未必适合楼主的场景。不理解说二的人都怎么想的?
7 楼
he_wen
2010-12-09
这个类没有考虑线程安全问题,因为HashMap本来就是线程不安全。我主要做的就是限制HashMap值的操作。在Tomcat源码中就是这样做的,因为Servlet获取请求信息如:request.getParameterMap()时候,刚刚开始Tomcat是不会马上把字符串解析出来,而是存放字符串,只有用户调用了函数的时候它才会解析,在存放到HashMap中。。。呵呵。。。可能起的名字有误会,希望大家见谅!!!刚刚开始写博客有很多地方请指教
6 楼
sundoctor
2010-12-09
这个真的没什么用,这个真的可以没有
5 楼
Foxswily
2010-12-09
“该类的名字叫做ParameterMap” VS. LockedMap
4 楼
finallygo
2010-12-09
这个类还是线程不安全
3 楼
agapple
2010-12-09
真没看出来是啥用途
1. lock 非原子变量
2. 没看到lock有任何set的地方。只看到判断lock了
1. lock 非原子变量
2. 没看到lock有任何set的地方。只看到判断lock了
发表评论
-
编程中注意事项
2012-10-18 15:23 1174最近的机器内存又爆满了,除了新增机器内存外,还应该好好re ... -
java线程池的设计思想
2012-07-03 20:25 1753ExecutorService executorForFM = ... -
java 代码规范
2012-02-16 16:25 1415java 代码规范 一、方法的规范 ... -
代码质量保证
2011-10-27 18:31 1537本文分为四节如:如何提高代码的可读性、一般异常的处理机制、JV ... -
高效率分离字符串到一个Map中
2010-12-08 21:10 2135package test.hewen; import j ... -
Java集合 之 动态数组
2010-12-08 19:44 1474注意:首先本程序是根 ... -
servlet源码和生命周期
2010-11-01 22:47 3149这里是servlet的类图之间的设计关系,里面接口、抽象类我只 ... -
泛型的内部原理与应用
2010-09-20 00:08 1509一、下面是说明泛型的基本原理与代码的应用 /** * ... -
注解与反射
2010-09-19 12:29 1770一、java 1.5的新特新注解和枚举 二、本文主要讲解注解 ... -
JavaBean内省的用法
2010-09-19 11:30 2013Introspector (Java Platform SE ... -
反射之类加载器详解和委托加载
2010-09-18 23:09 1870父类加载器。 下面用例子进行说明如: public ... -
Java流总结
2010-09-14 17:06 1570一、IO流的三种分类方式 1.按流的方向分为:输 ... -
Java容器
2010-09-10 14:51 4431一、List接口 ArrayList,对象加入之后大都是为了 ... -
java比较陌生的语法
2010-09-10 11:35 1073一、 Java并没有虚构函数,但是有finalize ... -
JAVA API String小细节之享元模式
2010-09-10 10:01 1477GOF:运用共享技术有效地支持大量细粒度的对象。 解释一下 ... -
Java对日期操作处理类
2010-09-08 21:08 4763项目中经常用到对日期 ...
相关推荐
在Java编程语言中,集合框架是开发者日常工作中不可或缺的一部分,HashMap作为其中的重要成员,它的实现原理对于理解Java性能优化和数据结构有深远的意义。HashMap是一个基于哈希表的数据结构,它实现了Map接口,...
Java集合专题总结:HashMap和HashTable源码学习和面试总结 本文总结了Java集合专题中的HashMap和HashTable,涵盖了它们的源码学习和面试总结。HashMap是一种基于哈希表的集合类,它的存储结构是一个数组,每个元素...
本资源详细介绍了 Java 中的 HashMap 类,包括其实现机制、Hash 存储机制、集合存储机制等方面的知识点。 1. HashMap 和 HashSet 的关系 HashMap 和 HashSet 是 Java Collection Framework 的两个重要成员,虽然...
以下是关于Java集合类,特别是HashMap、CurrentHashMap、ArrayList和LinkedList的详细知识点: 1. **HashMap**: HashMap是Java中最基本的键值对存储结构,基于哈希表实现。它提供了快速的插入、删除和查找操作,...
2. **HashMap**:Java集合框架的一部分,是一种键值对存储结构,提供了非常高效的查询和修改操作。 #### 实现步骤 ##### 第一步:创建WebService接口 为了更好地展示整个过程,我们首先需要创建一个简单的...
在这个“java集合练习题”中,我们主要关注如何使用Java集合框架来处理数据,特别是对于学生信息的存储、排序和输出。以下是对这个练习题的详细解析: 1. **集合框架简介**: Java集合框架是Java API的一部分,它...
Java集合框架是Java编程语言中的一个核心部分,它为数据存储和管理提供了高效且灵活的解决方案。本思维导图及总结旨在深入理解并掌握Java集合的相关概念和使用方法。 首先,我们来了解一下Java集合框架的基本构成。...
Java集合之HashMap用法详解 Java集合之HashMap用法详解主要介绍了Java集合之HashMap用法,结合实例形式分析了java map集合中HashMap定义、遍历等相关操作技巧。 HashMap概述 HashMap是Java集合框架中最常用的Map...
Java集合框架是Java编程语言中的核心组件之一,它为存储、管理和操作对象提供了一套高效且灵活的工具。本系列深入讲解了Java集合框架中的重要组成部分,包括HashMap、ArrayList、LinkedHashMap、HashSet以及...
本文将深入探讨Java集合框架的基础知识,包括接口、类、以及它们在实际开发中的应用。 首先,Java集合框架由一系列接口和实现这些接口的类组成。主要的接口有`List`、`Set`和`Queue`,它们各自代表了不同特性的数据...
Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高级的数据结构,使得开发者能够更方便地管理和操作对象。在本次实验中,我们主要关注了三个主要的集合接口:Set、List和Map,以及它们的一些常见...
Java基础-模拟HashMap集合(基于数组和链表) 在本文中,我们将详细介绍如何模拟Java的HashMap集合,使用数组和链表来实现Hash表的存储。我们将从基本概念开始,逐步深入到HashMap的实现细节中。 什么是HashMap? ...
Collection是Java集合框架中最重要的接口之一,它是所有单列集合的根接口。 ##### 1.2 Collection - **常用方法**: - `add(E e)`:向集合添加一个元素。 - `remove(Object o)`:从集合中移除指定元素。 - `...
Java集合框架是Java编程语言中的一个核心组成部分,它为数据存储和操作提供了丰富的接口和类。在本篇中,我们将深入探讨Java集合的排序机制以及集合类的详细使用。 首先,我们来了解一下Java集合的基本分类。Java...
这篇7页的PDF文档“java集合类HashMap总结”可能是对HashMap类的深入解析,包括其原理、常用方法以及在实际开发中的应用。 HashMap的核心特性在于它的哈希函数,这个函数将键(key)转换为一个哈希码(hash code)...
值得注意的是,由于HashMap的Entry数组是动态扩容的,数组的长度会根据实际存储的键值对数量进行增长,以保持较低的哈希冲突率。但是,在数组扩容时,所有的键值对都需要重新计算哈希值并分配到新的位置,这个过程...
ArrayList是Java集合框架中的一个接口实现类,基于动态数组实现,提供了按索引访问元素的高效性能。你可以通过增删改查(Add、Remove、Set、Get)等基本操作来管理ArrayList中的元素。在day20的代码中,可能会包含...
### Java集合框架总结 #### 一、Java集合框架概述 Java集合框架是Java标准库的一部分,它提供了一系列的接口和类来存储和操作各种类型的对象集合。这些接口和类遵循一致的设计模式,使得开发人员可以方便地管理和...
HashMap是Java集合框架的一部分,位于`java.util`包下,实现了Map接口,用于存储键值对(key-value pairs)。在深入理解HashMap之前,我们先简单回顾一下Java集合的基本概念。 Java集合框架包括Set、List和Map三个...