- 浏览: 430043 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
Glogo:
楼主您好,我在试验您的代码的时候发现新开的三个子线程并没有一直 ...
java 高并发 ReentrantLock -- 可重入的锁 -
univasity:
最近发觉也被限速了,投诉一下就好一会~~ 看来明天又要和电信M ...
ADSL上网速度慢 都是帐号限速惹的祸 -
liuyuanhui0301:
java 高并发 ReentrantLock -- 可重入的锁 -
dang_java:
呵.很好的说明文档.
JXTA技术与应用发展 -
helloqidi:
谢谢,学习了
SQL中exists和in的区别
|
级别: 初级 Brian Goetz (brian@quiotix.com), 首席顾问, Quiotix Corp 2003 年 8 月 29 日 <!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --><!--END RESERVED FOR FUTURE USE INCLUDE FILES--> 在7月份的那期 Java理论与实践(“ Concurrent collections classes”)中,我们简单地回顾了可伸缩性的瓶颈,并讨论了怎么用共享数据结构的方法获得更高的并发性和吞吐量。有时候学习的最好方法是分析专家的成果,所以这个月我们将分析 Doug Lea 的
我们可以回想一下,Hashtable(或者替代方案
有 32 个独立的锁,其中每个锁保护 hash bucket 的一个子集,这样需要独占访问 map 的操作就必须获得所有32个锁。一些 map 范围的操作,比如说
在进入 按照 JLS 的说法,“在没有显式同步的情况下,一个实现可以自由地更新主存,更新时所采取的顺序可能是出人意料的。”其意思是说,如果没有同步的话,在一个给定线程中某种顺序的写操作对于另外一个不同的线程来说可能呈现出不同的顺序, 并且对内存变量的更新从一个线程传播到另外一个线程的时间是不可预测的。 虽然使用同步最常见的原因是保证对代码关键部分的原子访问,但实际上同步提供三个独立的功能――原子性、可见性和顺序性。原子性非常简单――同步实施一个可重入的(reentrant)互斥,防止多于一个的线程同时执行由一个给定的监视器保护的代码块。不幸的是,多数文章都只关注原子性方面,而忽略了其他方面。但是同步在 JMM 中也扮演着很重要的角色,会引起 JVM 在获得和释放监视器的时候执行内存壁垒(memory barrier)。 一个线程在获得一个监视器之后,它执行一个 读屏障(read barrier)――使得缓存在线程局部内存(比如说处理器缓存或者处理器寄存器)中的所有变量都失效,这样就会导致处理器重新从主存中读取同步代码块使用的变量。与此类似,在释放监视器时,线程会执行一个 写屏障(write barrier)―― 将所有修改过的变量写回主存。互斥独占和内存壁垒结合使用意味着只要您在程序设计的时候遵循正确的同步法则(也就是说,每当写一个后面可能被其他线程访问的变量,或者读取一个可能最后被另一个线程修改的变量时,都要使用同步),每个线程都会得到它所使用的共享变量的正确的值。 如果在访问共享变量的时候没有同步的话,就会发生一些奇怪的事情。一些变化可能会通过线程立即反映出来,而其他的则需要一些时间(这由关联缓存的本质所致)。结果,如果没有同步您就不能保证内存内容必定一致(相关的变量相互间可能会不一致),或者不能得到当前的内存内容(一些值可能是过时的)。避免这种危险情况的常用方法(也是推荐使用的方法)当然是正确地使用同步。然而在有些情况下,比如说在像
如前所述, 清单1. ConcurrentHashMap 使用的 Map.Entry 元素
与 大多并发类使用同步来保证独占式访问一个数据结构(以及保持数据结构的一致性)。 不一致性的一个重要来源是可以避免得,其方法是使 新的 JMM 为 final 型变量提供初始化安全,而老的 JMM 不提供,这意味着另一个线程看到的可能是 final 字段的默认值,而不是对象的构造方法提供的值。实现必须能够同时检测到这一点,这是通过保证 检索操作首先为目标 bucket 查找头指针(是在不锁定的情况下完成的,所以说可能是过时的),然后在不获取 bucket 锁的情况下遍历 bucket 链。如果它不能发现要查找的值,就会同步并试图再次查找条目,如清单2所示: 清单2. ConcurrentHashMap.get() 实现
因为一个线程可能看到 hash 链中链接指针的过时的值,简单地从链中删除一个元素不足以保证其他线程在进行查找的时候不继续看到被删除的值。相反,从清单3我们可以看到,删除操作分两个过程――首先找到适当的 清单3. ConcurrentHashMap.remove() 实现
图1为删除一个元素之前的 hash 链: 图1. Hash链 图2为删除元素3之后的链: 图2. 一个元素的删除过程
由 随着 map 中元素数目的增长,hash 链将会变长,因此检索时间也会增加。从某种意义上说,增加 bucket 的数目和重排其中的值是非常重要的。在有些像 要说不用锁定就可以成功地完成 |
发表评论
-
深入JVM锁机制
2011-09-19 01:00 977目前在Java中存在两种 ... -
java 正则表达式 非捕获组(特殊构造)Special Constructs(Non-Capturing)
2011-06-20 23:15 1648针对Java API文档中的正则表达式关于特殊构造(非捕获组) ... -
Java文件映射[mmap]揭秘
2011-06-08 20:10 1188前言 相信现在 ... -
原创 java的Mmap二三事
2011-06-08 19:46 1203转自 :http://blog.csdn.net/kabini ... -
java 安全沙箱模型详解
2011-04-18 16:29 944起到第一道安全保障作 ... -
非阻塞算法-ReentrantLock代码剖析之ReentrantLock.lock
2011-04-15 13:59 1083ReentrantLock是java.util.concurr ... -
CyclicBarrier与CountDownLatch、栅栏与计数器
2011-04-15 10:39 1471在多线程设计中,我猜常常会遇到线程间相互等待以及某个线程等待1 ... -
Java KeyStore
2011-04-13 17:17 1469简介Java自带的keytool工具是个密钥和证书管理工具。它 ... -
Security Managers and the JavaTM 2 SDK
2011-04-12 13:37 777The original Link : http://do ... -
Something about SecurityManager
2011-04-12 13:33 789The Java Security was made up o ... -
Using the Java SecurityManager with Tomcat
2011-04-12 13:30 999Why use a SecurityManager? The ... -
Java安全管理器(Security Manager)(
2011-04-11 14:54 889转载自: http://blog.sina.com.cn/s/ ... -
Java对象的强、软、弱和虚引用(1)
2011-04-01 08:44 803本文介绍Java对象的强 ... -
Java对象的强引用、软引用、弱引用和虚引用
2011-04-01 08:39 914在JDK1.2以前的版本中, ... -
java 高并发 ReentrantLock -- 可重入的锁
2011-03-30 08:09 2383ReentrantLock -- 可重入的锁 可重入锁指 ... -
线程运行栈信息的获取
2011-03-24 17:23 1312线程运行栈信息的获取 ... -
java序列化——Serializable
2011-03-15 23:17 1074类通过实现 java.io.Serializable 接口 ... -
Java aio(异步网络IO)初探
2011-03-11 16:34 1570按照《Unix网络编程》的 ... -
JAVA NIO 简介
2011-03-11 13:38 11181. 基本 概念 IO 是主存和外部设备 ( 硬盘、终 ... -
[字节码系列]ObjectWeb ASM构建Method Monitor
2011-03-08 18:08 924在前面的篇章中,我们看到Java Instru ...
相关推荐
《Java理论与实践:构建一个更好的HashMap》这篇文章深入剖析了Doug Lea的`util.concurrent`包中的`ConcurrentHashMap`实现,旨在展示如何在保证线程安全的同时提高并发性能。`ConcurrentHashMap`相较于传统的`...
在JavaScript中,HashMap是一种常用的键值对存储结构,它提供了快速的插入、删除和查找操作。...通过阅读和理解HashMap.js文件中的源码,开发者可以更好地掌握JavaScript的底层原理,并在实际项目中灵活应用。
通过深入分析该类的实现细节,我们能够更好地理解其内部机制,并学会如何在实际开发中有效地利用它。 #### 类概述 `hashMap`类是基于Flex框架中的`Dictionary`类构建的。`Dictionary`是Flash中内置的一个类,它...
这意味着`HashMap`在容量管理上更加高效,因为它能够更好地利用内存空间,减少扩容操作。 ### MVC模式简介 MVC(Model-View-Controller)模式是一种软件架构模式,由SUN提出,主要用于构建可扩展、可维护的大型...
为了更好地展示整个过程,我们首先需要创建一个简单的WebService接口,该接口包含两个方法:一个用于设置`HashMap`,另一个用于获取已设置的`HashMap`。 ```java package hao; import java.util.HashMap; public ...
总之,"Go-rhh"为Go程序员提供了一个轻量级且高效的HashMap解决方案,它的设计思路和实现方式对于理解哈希表和散列技术都有很好的学习价值。在实际项目中,开发者可以根据具体需求权衡是否选择此包,以及如何有效地...
如果你的应用程序是单线程环境,并且希望获得更高的性能,那么 `HashMap` 将是一个更好的选择。相反,如果你的应用程序需要处理多线程并发问题,并且对线程安全性有严格要求,那么 `Hashtable` 或者通过 `...
标题提到的“前端开源库-hashmap”是一个专门为JavaScript设计的`HashMap`实现,旨在为开发者提供一个高效且易于使用的哈希映射解决方案。这个开源库通常包含了以下功能: 1. **哈希函数**:库的核心部分是高效的...
《深入理解Delphi DCL与HashMap实现》 ...而`hashmap.pas`则是一个具体的实践案例,通过分析其源码,开发者可以深化对HashMap和哈希表的理解,从而在实际项目中更好地利用这些数据结构,提高代码效率。
- **Makefile**:这是一个构建脚本,通常用于自动化编译和测试过程。在这个项目中,它可能包含了编译HashMap源代码和运行测试的命令。 - **README.md**:这是项目文档,通常包含项目介绍、安装指南、使用示例和贡献...
因此,当元素数量达到一定阈值时,需要进行扩容操作,通常通过创建一个新的更大的哈希表并将旧表中的元素重新散列到新表中来实现。 4. **内存管理**:在C语言中,需要手动管理内存。哈希表的内存分配包括为哈希表...
在这个名为"成为一个更好的Java程序员的系列教程.zip"的压缩包中,包含的资源是帮助Java开发者提升技能的宝贵资料。这个教程很可能是一个完整的、逐步学习的路径,旨在帮助程序员从初阶进阶到高阶,掌握Java编程的...
总的来说,“csc241-HashMapDemo”项目是一个很好的学习资源,它可以帮助你了解如何利用HashMap来构建一个简单的数据库系统,同时加深对Java集合框架的理解。通过实践和探索,你可以掌握如何在自己的项目中有效地...
Clevel-HashMap是Java编程语言中一种高效且功能强大的数据结构,它属于哈希表的实现,主要用于存储键值对。在Java集合框架中,Clevel-HashMap...通过深入理解其内部机制,开发者可以更好地利用它来优化应用程序的性能。
Grunt是Node.js的一个任务管理工具,它允许开发者自动化构建过程,包括编译、测试、压缩等。在这个特定的插件中,"grunt-hashmap-ext"的功能是修改PHP文件,使得它们在执行后返回一个数组,而不是像传统方式那样创建...
Java编程是目前全球范围内广泛应用的编程语言之一,尤其在企业级应用开发中占据主导地位。对于初学者来说,掌握Java编程不仅能够打开...记住,学习编程是一个持续的过程,不断学习和实践,你将不断提升自己的编程技能。
在实际使用中,理解这些特性可以帮助我们更好地利用HashSet,例如在需要快速查找不重复元素的场景下,或者在单线程环境中,HashSet是一个非常实用的选择。然而,在多线程环境下,为了保证线程安全,可以使用`...
【标题】:“Acegi构建基于内存的用户信息认证之...通过理解和掌握这一技术,开发者可以更好地保障应用程序的安全性。然而,对于生产环境,通常推荐使用更持久化的用户存储,如数据库,以避免数据丢失和增强安全性。
网页模板转换程序是一种在Web应用开发中常用的工具,特别是在Servlet开发中。这个程序的主要功能是将预先设计好的...通过理解和熟练运用这种模板转换技术,开发者可以更好地实现前后端分离,提升Web应用的开发效率。
Swift是一种强大的、面向对象的编程语言,由Apple公司开发,用于构建iOS、macOS、watchOS和tvOS等平台的应用程序。...在观看这个视频教程时,确保理解每个示例,实践应用,以便更好地掌握这一核心概念。