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

 





这样两个线程可以轮流的进行各自的事情,并且不会造成数据安全的问题 还能提高效率
posted @ 2017-11-09 10:12  1master5  阅读(372)  评论(0编辑  收藏  举报