- 浏览: 446322 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (369)
- javascript html (20)
- java (31)
- jquery (15)
- jcrop (0)
- JEECG (1)
- ajax (3)
- 反射 (3)
- VI (1)
- mysql (48)
- easyui (1)
- svn (2)
- MD5 加密 (1)
- spring (14)
- ORACLE (8)
- 经验总结 (1)
- TCP/IP协议 (1)
- ICMP协议 (1)
- eclipse (1)
- Reflect (1)
- linux (21)
- android (5)
- excel 操作 (1)
- java tree (1)
- html (1)
- plupload (1)
- mongodb (9)
- aes (1)
- python (1)
- java relax (1)
- highcharts (2)
- json (2)
- java 多线程 (30)
- maven (2)
- 设计模式 (1)
- jsp+js (2)
- 面向对象 (1)
- jvm (16)
- 缓存 (1)
- proxy (1)
- 聊侃 (1)
- 面经 (1)
- java 字节 (1)
- java 类加载器 (2)
- java 基础 (2)
- java 语法糖 (1)
- java 位运算 (1)
- 排序 (3)
- java 服务器性能优化 (19)
- 网络编程 (2)
- jvm 参数设置 (0)
- jersey (1)
- webservice (2)
- nginx+多tomcat 集成 (5)
- nginx (16)
- squid (3)
- memcached (5)
- 正则表达式 (1)
- 常用免费接口 (1)
- jpa (1)
- win7 (1)
- java处理大文件 (1)
- js正则表达式 (1)
- tomcat (1)
- java 敏感字 (1)
- 系统架构优化 (4)
- 学习 (1)
- 本地测试QQ微博第三方登陆 (1)
- java 错误 (1)
- 微信支付 (1)
- https (1)
- httpclient (1)
- awk (2)
- loadrunner (1)
- sql server 2008 (3)
- git (4)
- sql server2008 (1)
- solr (2)
- centos (1)
- 数据存储架构 (3)
- log4j (1)
- weboffice (1)
- 并发编程 (1)
- postgreSQL (0)
- ssl (1)
- openssl (1)
- activeMQ (2)
- IDEA (1)
- shell (1)
- ansible (4)
- docker (2)
- grafana (1)
- jmeter (1)
- TLS (1)
- 将博客搬至CSDN (1)
最新评论
-
dida1990:
啊喔,过去了这么久,不过还是评一个。谁说uuid的hashCo ...
高并发生成订单号(二) -
annan211:
yclovesun 写道使用了uuid,为什么还要machin ...
高并发生成订单号(二) -
yclovesun:
使用了uuid,为什么还要machineId?uuid已经可以 ...
高并发生成订单号(二) -
u013280917:
太深奥,看不懂
mysql优化特定类型的查询
[size=small]
同步容器类在执行每个操作期间都持有一个锁。在一些操作中,例如 HashMap.get 或List.contains, 可能包含大量的工作;当遍历散列桶或链表来查找某个特定的对象时,必须在许多元素上调用equals(equals本身还包含一定的计算量)。 在基于散列的容器中,某些情况下,某个糟糕的散列函数还会把散列表变成现行链表。当遍历很长的链表并且在某些或者全部元素上调用equals方法时, 会话费很长的时间,而其他线程在这段时间内都不能访问该容器。 与HashMap 一样,ConcurrentHashMap 也是一个基于散列的Map,但他使用了完全不同的加锁策略来提供更高的并发 性和伸缩性 ConcurrentHashMap 并不是将每个方法都在同一个锁上同步并使得每一次只能有一个线程访问容器,而是使用一种力 度更细的加锁机制来实现更大成都的共享, 这种机制称为分段锁(Lock Striping),在这种机制中国,任意数量的读取线程可以并发的访问Map,执行读取操作的 线程和执行写入操作的线程可以并发的访问Map, 并且一定数量的写入线程可以并发的修改Map。ConcurrentHashMap 带来的结果是,在并发访问环境下将实现更高 的吞吐量,二期单线程环境中只损失非常小的性能。 ConcurrentHashMap 与其他并发容器一起增强了同步容器类:他们提供的迭代器不会抛出ConcurrentModificationException , 因此不需要在迭代的过程中对容器加锁。 COncurrentHashMap 返回的迭代器具有弱一致性,而并非"及时失败"。 弱一致性的迭代器可以容忍并发的修改,当创建迭代器时会遍历已有的元素,并可以在迭代器被构造之后将修改操作反映给容器。 尽管有这些改进,但仍然有一些需要权衡的因素。对于一些需要在整个Map上进行计算的方法,例如size 和isEmpty, 这些方法的语义被略微减弱了以反映容器的并发特性。由于size返回的结果在计算时可能已经过期了,他实际上只是一个估值,因此允许size返回 一个近似值而不是一个精确值。这虽然看上去让人不安,但实际上size和isEmpty这样的方法在并发环境下用的很少,因为他们返回的值总在不断变化,因此, 这些操作的需求被弱化了,以换取其他更重要操作的性能优化。包括get/put/containsKey/remove等。 在ConcurrentHashMap 中没有实现对Map加锁以提供独占访问,在hashtable 和synchronizedMap 中,获取Map的锁能防止其他线程访问这个Map。 在一些不常见的情况下需要这种功能,例如通过原子方式添加一些映射,或者对Map迭代若干次并在此期间保持元素顺序相同。然而,总体来说这种权衡还是合理的 因为并发容器的内容会持续变化。 与Hashtable 和 synchronizedMap 相比,ConcurrentMap 有这更多的优势和更少的劣势,因此在大多数情况下,用ConcurrentHashMap来代替Map 能进一步提高代码的可伸缩性。只有当应用程序需要加锁Map以独占访问时,才应该放弃使用ConcurrentHashMap.[/size]
发表评论
-
java 多线程操作数据库 及 静态bean注入
2018-01-09 10:47 865package com.robustel.rlink.de ... -
Amino 框架简介
2014-10-17 11:30 1399对数据加锁是实现多线程的一种策略,但是加锁无疑会增加系 ... -
Java 重入锁(ReentrantLock)和内部锁(synchronized)
2014-10-16 15:44 1556ReentrantLock 和 synchronize的 ... -
Java 锁分离
2014-10-16 15:35 1303读写锁思想的延伸就是锁分离。读写锁根据读写操作功能上 ... -
java 高性能运算-- 双端队列
2014-10-15 16:04 981JDK 1.6中 提供了一种双端队列,简称 Dequ ... -
java 高性能运算--并发队列
2014-10-15 15:33 2452JDK 提供了两套并发队列的实现,一个是以 Conc ... -
并发模式下的单例创建
2014-09-29 16:20 740单例模式的创建 分为 ... -
Java 同步集合的应用
2014-09-14 23:45 0Java 同步集合的应用 -
java 阻塞队列的应用
2014-09-14 23:44 0java 阻塞队列的应用 -
java 多线程集合
2014-09-14 23:28 0java 多线程集合 -
java Exchanger 线程数据交换
2014-09-14 22:56 0java Exchanger 线程数据交换 -
java CountDownLatch 实例
2014-09-15 18:07 823Java的concurrent包里面的CountDownLat ... -
java 多线程之 CyclicBarrier
2014-09-13 19:25 793CyclicBarrier (周期障碍)类可以帮助同步,它允许 ... -
java CyclicBarrier 循环阻塞
2014-09-12 22:43 396java CyclicBarrier 循环阻塞 -
java 多线程的锁消除
2014-09-12 18:31 1209Java 中使用同步 来保证数据的安全性,但是对于一些明显不会 ... -
java锁的种类以及辨析(一):自旋锁
2014-09-12 16:22 1594Java的多线程安全是基于Lock机制(或者隐式锁synchr ... -
Java锁的种类以及辨析
2014-09-12 15:15 1545锁作为并发共享数据,保证一致性的工具,在java平台有多种实现 ... -
java Semaphore 信号量详解和实例
2014-09-12 11:51 2112生产者线程用于往链表里添加节点,数个工作线程从链表取出节点并处 ... -
4个线程,2个每次加1,两个每次减1
2014-09-01 23:44 814package threadTest; public ... -
线程范围内的共享数据 ThreadLocal 分析与详解
2014-08-30 19:21 775Java 线程范围内的数据共享机制,需要解决的问题是 : 多 ...
相关推荐
Java-concurrent-collections-concurrenthashmap-blockingqueue.pdf
Java——并发容器之ConcurrentHashMap;Java——并发容器之ConcurrentHashMap;Java——并发容器之ConcurrentHashMap;Java——并发容器之ConcurrentHashMap;Java——并发容器之ConcurrentHashMap;Java——并发...
Java 多线程与并发(13_26)-JUC集合_ ConcurrentHashMap详解
java源码剖析-ConcurrentHashMap
Java并发编程之ConcurrentHashMap Java并发编程之ConcurrentHashMap.pdf
Java高并发相关知识点包括: 线程:Java多线程的实现方式,包括继承Thread类和实现Runnable接口。 锁:Java中的锁机制,包括synchronized关键字和ReentrantLock类。 线程池:Java中的线程池机制,包括线程池的创建...
Java利用ConcurrentHashMap实现本地缓存demo; 基本功能有缓存有效期、缓存最大数、缓存存入记录、清理线程、过期算法删除缓存、LRU算法删除、获取缓存值等功能。 复制到本地项目的时候,记得改包路径哦~
01 6.1java8的函数式编程简介 02 6.2函数式编程基础 03 6.3一步一步走入函数式编程 04 6.5增强的future:completablefuture 05 6.6读写锁的改进:stampedlock 06 6.7原子类的增强 实战Java高并发程序设计(第2版)...
ConcurrentHashMap使用了分段锁(Segment)来实现并发的读写操作,每个Segment都相当于一个小的HashMap,将整个哈希表分成多个部分。这样可以同时进行多个线程的并发读写操作,不会阻塞其他线程的访问。 需要注意的...
java7-8中的 HashMap和ConcurrentHashMap全解析
java7-8中的 HashMap和ConcurrentHashMap全解析 如果你想了解底层的逻辑就来看看吧
Java 7_ConcurrentHashMap.jpg
HashTable是一个线程安全的类,它使用synchronized来锁住整张Hash表来实现线程安全,即每次锁住整张表让线程独占,相当于所有线程进行读写时都去竞争一把锁,导致效率非常低下。ConcurrentHashMap可以做到读取数据不...
主要为大家详细分析了Java并发系列之ConcurrentHashMap源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
│ Java并发编程.png │ ppt+源码.rar │ 高并发编程第二阶段01讲、课程大纲及主要内容介绍.wmv │ 高并发编程第二阶段02讲、介绍四种Singleton方式的优缺点在多线程情况下.wmv │ 高并发编程第二阶段03讲、...
ConcurrentHashMap为了提高本身的并发能力,在内部采用了一个叫做Segment的结构,一个Segment其实就是一个类HashTable的结构,Segment内部维护了一个链表数组,我们用下面这一幅图来看下ConcurrentHashMap的内部结构...
【2018最新最详细】并发多线程教程,课程结构如下 ...25.大白话说java并发工具类-CountDownLatch,CyclicBarrier 26.大白话说java并发工具类-Semaphore,Exchanger 27.一篇文章,让你彻底弄懂生产者--消费者问题
5.2.1 ConcurrentHashMap 5.2.2 额外的原子Map操作 5.2.3 CopyOnWriteArrayList 5.3 阻塞队列和生产者-消费者模式 5.3.1 示例:桌面搜索 5.3.2 串行线程封闭 5.3.3 双端队列与工作密取 5.4 阻塞方法与中断...
java本地缓存ConcurrentHashMap