黑马程序员技术交流社区
标题:
线程同步与不同步的问题
[打印本页]
作者:
严海荣
时间:
2012-10-5 18:59
标题:
线程同步与不同步的问题
本帖最后由 严海荣 于 2012-10-6 14:14 编辑
StringBuider 线程不同步
StringBuffer 线程同步
Arraylist 线程不同步
verctor 线程同步
Hashtable 线程同步
HashMap 线程不同步
不同步的是不是因为效率问题都把同步的淘汰了?不知道还有哪些类似的情况。
作者:
李志群
时间:
2012-10-5 23:01
同步的话 要每次都会判断锁,效率会很低,一般在java1.2新版本 的集合容器里面 都是非同步的 楼主记住这个就可以啦 哈哈
例如 collection集合 中的 list 集合
ArrayList 底层是数组结构,非同步。查询快,1.2版本后出现的 为了提高效率。
linkedList 底层是链表结构,非同步,增删快,1.2版本后出现的 也是为了提高效率
Vectory 底层是数组结构 被ArrayList给替代了 是同步的,除了可以用迭代器取出元素外,
还可以使用枚举方式来取出元素。这个集合是java的老成员1.0就存在的。要频繁的判断锁所以导致效率低。
set集合
HashSet:底层是哈希表结构,非同步,查询特快,取出元素时候是没有顺序的,因为hashset底层来判断数据有特有的哈希
算法,此集合存储的元素没有重复的,因为hashCode()方法比较完两个元素,如果有相同的,那么会再次调用
equals方法来比较两个元素是否相同。,
TreeSet:底层结构是二叉树,也是非同步的,取出元素时候默认是按自然排序的。
揭下来是Map接口的集合:
这个接口里面的集合都是按一对 一对的来存储的。
map集合添加元素的方法是put()方法。,
map集合取出元素的方式是将map集合换成set集合 在使用迭代器取出,可以使用keyset() 或者是EntrySet()方法。
hashmap:底层是哈希表,非同步,允许null作为键,允许null作为值。
Treemap:底层是二叉树,非同步,默认是自然顺序,也可以使用比较器的方法。
hashtable:底层是哈希表,被hashmap所取代了,也是元老级别的,是同步的,不允许null作为键,不允许null作为值。
大概总结这些 希望楼主采纳嘿嘿
作者:
姬仁贵
时间:
2012-10-6 12:57
线程同步的集合貌似都是元老级的呀,因为效率的问题JDK对其进行升了级。
JDK升级无外乎围绕三点进行,
1.提高安全性;
2.简化代码;
3.提高效率;
对于集合线程同步的升级就是为了提高效率,可能会问这线程都不同步了,万一真的碰到了多线程该怎么办,你可以使用线程安全的集合,但是这比较麻烦,还要自己加锁,还容易出错,java就提供了专门的方式,就是你给我一个线程不安全的集合,我就返回给你一个线程安全的集合,这避免了我们自己加锁的麻烦,降低了出错的概率。这个你可以查一下API,因为当时只是提了一次没有记清楚···
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2