关闭
当前搜索:

HashMap为什么是线程不安全的?

一直以来只是知道HashMap是线程不安全的,但是到底HashMap为什么线程不安全,多线程并发的时候在什么情况下可能出现问题? HashMap底层是一个Entry数组,当发生hash冲突的时候,hashmap是采用链表的方式来解决的,在对应的数组位置存放链表的头结点。对链表而言,新加入的节点会从头结点加入。 javadoc中关于hashmap的一段描述如下: 此实现不是...
阅读(106) 评论(0)

Iterator的remove()和Collection的remove()

一、遍历集合的方式有很多,这里就以List 为例 如果是单线程的我们一般使用: int  len= list.size() [java] view plain copy for (int i=0;i    }   如果是多线程的程序,我们就用Iterator 迭代器来遍历: [java] view...
阅读(83) 评论(0)

【Java集合源码剖析】LinkedHashmap源码剖析

转载请注明出处:http://blog.csdn.net/ns_code/article/details/37867985     前言:有网友建议分析下LinkedHashMap的源码,于是花了一晚上时间研究了下,分享出此文(这个系列的最后一篇博文了),希望大家相互学习。LinkedHashMap的源码理解起来也不难(当然,要建立在对HashMap源码有较好理解的基础上)。 ...
阅读(68) 评论(0)

Java提高篇(三四)-----fail-fast机制

在JDK的Collection中我们时常会看到类似于这样的话:         例如,ArrayList: 注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误的做法:迭代器...
阅读(87) 评论(0)

java中fail-fast 和 fail-safe的区别

原文地址:http://javahungry.blogspot.com/2014/04/fail-fast-iterator-vs-fail-safe-iterator-difference-with-example-in-java.html 在我们详细讨论这两种机制的区别之前,首先得先了解并发修改。 1.什么是同步修改? 当一个或多个线程正在遍历一个集合Collection,此...
阅读(90) 评论(0)

ArrayDeque

前言 Java里有一个叫做Stack的类,却没有叫做Queue的类(它是个接口名字)。当需要使用栈时,Java已不推荐使用Stack,而是推荐使用更高效的ArrayDeque;既然Queue只是一个接口,当需要使用队列时也就首选ArrayDeque了(次选是LinkedList)。 总体介绍 要讲栈和队列,首先要讲Deque接口。Deque的含义是“double ended queue”,即...
阅读(55) 评论(0)

Hashpmap的原理,HashMap怎样保证key的唯一性

1.    HashMap概述    HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。   2.    HashMap的数据结构    在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构...
阅读(459) 评论(0)

HashMap的基本原理与它的线程安全性

http://blog.csdn.net/t894690230/article/details/51323946 1. 前言 能用图说清楚的,就坚决不用代码。能用代码撸清楚的,就坚决不写解释(不是不写注释哦)。 以下所有仅针对JDK 1.7及之前中的HashMap。 2. 数据结构 HashMap内部通过维护一个Entry数组(变量为table),来实现其基本...
阅读(552) 评论(0)

BlockingQueue的基本原理

http://blog.csdn.net/t894690230/article/details/53088660 1. 前言 BlockingQueue即阻塞队列,它算是一种将ReentrantLock用得非常精彩的一种表现,依据它的基本原理,我们可以实现Web中的长连接聊天功能,当然其最常用的还是用于实现生产者与消费者模式,大致如下图所示: 在Java中,Block...
阅读(455) 评论(0)

HashMap的扩容机制---resize() & 死循环的问题

1.8 与1.7 变化较大, http://www.cnblogs.com/RGogoing/p/5285361.html 学习内容: 1.HashMap在多线程的情况下出现的死循环现象     当初学Java的时候只是知道HashMap在并发的情况下使用的话,会出现线程安全问题,但是一直都没有进行深入的研究,也是最近实验室的徒弟在问起这个问题的原因之后,才开始进...
阅读(2066) 评论(1)

Map拷贝 关于对象深拷贝 浅拷贝的问题

问题:map拷贝时发现数据会变化。 高能预警,你看到的下面的栗子是不正确的,后面有正确的一种办法,如果需要看的话的,请看到底,感谢各同学的提醒,已做更正,一定要看到最后      先看例子:            public class CopyMap {       /**        * @author 张仲华        * @pa...
阅读(1554) 评论(0)

[Java基础要义]HashMap、LinkedHashMap元素遍历机制探讨

http://blog.csdn.net/luanlouis/article/details/43017071       Map作为键值对Entry的的容器,对其内部 键值对Entry 的遍历总归是要有一个顺序的。       本文重点讨论HashMap及其子类LinkedHashMap的遍历机制,总结出两者的特点和适用情况。  CSDN-2014博客之星投票啦 ...
阅读(264) 评论(0)

LinkedHashMap

HashMap:         put -> addEntry(新建一个Entry)         get         getEntry   LinkedHashMap:        put -> addEntry(重写)                 新建一个Entry,然后将其加入header前                 e.a...
阅读(217) 评论(0)

Java遍历HashMap并修改(remove)

遍历HashMap的方法有多种,比如通过获取map的keySet, entrySet, iterator之后,都可以实现遍历,然而如果在遍历过程中对map进行读取之外的操作则需要注意使用的遍历方式和操作方法。 1 2 3 4 5 6 7 8 9 10 11 12 13 1...
阅读(1204) 评论(0)

Java Core系列之ConcurrentHashMap实现(JDK 1.7)

ConcurrentHashMap类似Hashtable,是HashMap更高效的线程安全版本的实现。不同于Hashtable简单的将所有方法标记为synchronized,它将内部数组分成多个Segment,每个Segment类似一个Hashtable,从而减少锁的粒度,并且它内部有一些比较tricky实现,让get操作很多时候甚至不需要锁(本文代码基于JDK 1.7,它在JDK 1.6的基...
阅读(572) 评论(0)
20条 共2页1 2 下一页 尾页
    个人资料
    • 访问:9038487次
    • 积分:75676
    • 等级:
    • 排名:第25名
    • 原创:262篇
    • 转载:2812篇
    • 译文:3篇
    • 评论:783条
    文章分类
    最新评论