zoukankan      html  css  js  c++  java
  • java集合之 ConcurrentHashMap的产生

    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(); } } }
    
    
    
    
    


    这样两个线程可以轮流的进行各自的事情,并且不会造成数据安全的问题 还能提高效率
  • 相关阅读:
    LightOJ 1300 边双联通分量+交错路染色
    HDU 6143 快速幂,组合数
    windows 下fc工具
    HDU 6136 模拟
    HDU 6129 暴力,规律
    UVA Live 7770 模拟
    1096: [ZJOI2007]仓库建设
    1191: [HNOI2006]超级英雄Hero
    3224: Tyvj 1728 普通平衡树
    1208: [HNOI2004]宠物收养所
  • 原文地址:https://www.cnblogs.com/wgj-master/p/7808054.html
Copyright © 2011-2022 走看看