ConcurrentHashMap:  在java集合中 最常用的是ArrayList 效率最高的还是HashMap 但是线程不安全
  HashTable是线程安全的(里面的方法是同步方法) 但相比HashMap效率底下
   为了解决 即能线程安全 又能提高并发效率 ConcurrentHashMap应运而生
   ConcuurentHashMap是锁分段技术----就是在容器里放多把锁 每把锁锁定一段数据(不是所有的数据)
   当多个线程访问不同的数据段时 就不会存在竞争锁的情况(减少竞争锁的概率)从而提高线程的并发访问效率

可知 java是在一个不断完善的过程(活到老 学到老)

比较经典的例子是信息的发送和接受

发送类
public class SendThread extends Thread {
@Override
public void run() {
try {
sleep(6000);
while (SendReceiveTest.pushMessage.size() > 0) {
for (Entry<Integer, String> hashMap : SendReceiveTest.pushMessage.entrySet()) {
System.out.println("消息id:" + hashMap.getKey()+ "未发送成功,在此重发:" + hashMap.getValue());
}
sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
    }
}

接收类
public class ReceiveThread extends Thread{
@Override
public void run() {
try {
for (int i = 0; i < 10000; i++) {
sleep(2000);
for(Entry<Integer, String> map:SendReceiveTest.pushMessage.entrySet()){
if (map.getKey()==i) {
System.out.println("成功收到id为:"+map.getKey()+"返回的信息,删除该元素");
SendReceiveTest.pushMessage.remove(map.getKey());
}
}
System.out.println("内存对象中的元素数量为:"+SendReceiveTest.pushMessage.size());
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}


这样两个线程可以轮流的进行各自的事情,并且不会造成数据安全的问题 还能提高效率

java集合之 ConcurrentHashMap的产生的更多相关文章

  1. 死磕 java集合之ConcurrentHashMap源码分析(三)

    本章接着上两章,链接直达: 死磕 java集合之ConcurrentHashMap源码分析(一) 死磕 java集合之ConcurrentHashMap源码分析(二) 删除元素 删除元素跟添加元素一样 ...

  2. Java集合:ConcurrentHashMap原理分析

    集合是编程中最常用的数据结构.而谈到并发,几乎总是离不开集合这类高级数据结构的支持.比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap).这篇文章主 ...

  3. 死磕 java集合之ConcurrentHashMap源码分析(一)

    开篇问题 (1)ConcurrentHashMap与HashMap的数据结构是否一样? (2)HashMap在多线程环境下何时会出现并发安全问题? (3)ConcurrentHashMap是怎么解决并 ...

  4. 死磕 java集合之ConcurrentHashMap源码分析(二)——扩容

    本章接着上一章,链接直达请点我. 初始化桶数组 第一次放元素时,初始化桶数组. private final Node<K,V>[] initTable() { Node<K,V> ...

  5. 死磕 java集合之终结篇

    概览 我们先来看一看java中所有集合的类关系图. 这里面的类太多了,请放大看,如果放大还看不清,请再放大看,如果还是看不清,请放弃. 我们下面主要分成五个部分来逐个击破. List List中的元素 ...

  6. Java集合(9):ConcurrentHashMap

    一.ConcurrentHashMap介绍 我们可以在单线程时使用HashMap提高效率,而多线程时用Hashtable来保证安全.但是,HashMap中未进行同步考虑,而Hashtable则使用了s ...

  7. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  8. Java 集合框架

    Java集合框架大致可以分为五个部分:List列表,Set集合.Map映射.迭代器.工具类 List 接口通常表示一个列表(数组.队列.链表 栈),其中的元素 可以重复 的是:ArrayList 和L ...

  9. 深入java集合系列文章

    搞懂java的相关集合实现原理,对技术上有很大的提高,网上有一系列文章对java中的集合做了深入的分析, 先转载记录下 深入Java集合学习系列 Java 集合系列目录(Category) HashM ...

随机推荐

  1. HDU 3480 Division DP斜率优化

    解题思路 第一步显然是将原数组排序嘛--然后分成一些不相交的子集,这样显然最小.重点是怎么分. 首先,我们写出一个最暴力的\(DP\): 我们令$F[ i ][ j ] $ 为到第\(i\)位,分成\ ...

  2. Java使用阿里云OSS对象存储上传图片

    原 Java使用阿里云OSS对象存储上传图片 2017年03月27日 10:47:28 陌上桑花开花 阅读数 26804更多 分类专栏: 工作案例总结 版权声明:本文为博主原创文章,遵循CC 4.0 ...

  3. TensorFlow写的神经网络不work的原因

    for epoch in range(training_steps): with tf.Session() as sess: sess.run(tf.global_variable_initializ ...

  4. Class constructor FileManager cannot be invoked without 'new' in undefined (line undefined, column undefined)

    解决办法: 1.删除package.json属性devDependencies的 less 和 less-loader ; 2.重新安装 npm i less less-loader --save-d ...

  5. idea 编译内存溢出

    idea.max.intellisense.filesize=9999 idea.max.content.load.filesize=99999 idea.cycle.buffer.size=disa ...

  6. (转)php中字符过滤

    有时候为了安全起见,我们需要对用户输入的字符串进行转义       文章中有不正确的或者说辞不清的地方,麻烦大家指出了--- 与PHP字符串转义相关的配置和函数如下: 1.magic_quotes_r ...

  7. 使用layui异步请求上传图片在tp5.1环境下出现“请对上传接口返回json”的错误的解决方法

    正常情况下返回json数据使用return json(); 但是使用layui会报错,然后想到了使用json_encode()包装一下用一个变量接收后,再使用return();返回接收json格式的变 ...

  8. winform Timer控件的使用

    private void button1_Click(object sender, EventArgs e){ Timer timer1 = new Timer(); timer1.Interval ...

  9. shell script operate the date

    How to increment a date in a bash script Use the date command's ability to add days to existing date ...

  10. 一起学vue指令之v-once

    一起学vue指令之v-once 一起学 vue指令 v-once  指令可看作标签属性 v-once 口该指令后面不需要跟任何表达式(v-for后面接表达式) 口该指令表示元素和组件只渲染一次,不会随 ...