java中线程安全的容器_jfinal容器线程安全吗

java中线程安全的容器_jfinal容器线程安全吗四、线程安全的容器类Java编码中,我们经常需要用到容器来编程。在并发环境下,Java提供一些已有容器能够支持并发。1.Map在Map类中,提供两种线程安全容器。java.util.HashtableHashtable和HashMap类似,都是散列表,存储键值对映射。主要区别在于Hashtable是线程安全的。当我们查看Hashtable源码的时候,可以看到Hashtable的方法都是通过syn

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

四、线程安全的容器类

Java编码中,我们经常需要用到容器来编程。在并发环境下,Java提供一些已有容器能够支持并发。

1.Map

CollectionMap

在Map类中,提供两种线程安全容器。

  • java.util.Hashtable

Hashtable和HashMap类似,都是散列表,存储键值对映射。主要区别在于Hashtable是线程安全的。当我们查看Hashtable源码的时候,可以看到Hashtable的方法都是通过synchronized来进行方法层次的同步,以达到线程安全的作用。

  • java.util.concurrent.ConcurrentHashMap

ConcurrentHashMap是性能更好的散列表。在兼顾线程安全的同时,相对于Hashtable,在效率上有很大的提高。我们可以猜想,Hashtable的线程安全实现是对方法进行synchronized,很明显可以通过其他并发方式,如ReentrantLock进行优化。而ConcurrentHashMap正是采用了ReentrantLock。运用锁分离技术,即在代码块上加锁,而不是方法上加。同时ConcurrentHashMap的一个特色是允许多个修改并发操作。这就有意思了,我们知道一般写都是互斥的,为什么这个还能多个同时写呢?那是因为ConcurrentHashMap采用了内部使用段机制,将ConcurrentHashMap分成了很多小段。只要不在一个小段上写就可以并发写。

2. Collection

Collection

Collection部分主要是运用的CopyOnWrite机制,即写时复制机制。从字面上就能理解什么意思,就是当我们往一个容器里添加元素的时候,先对这个容器进行一次复制,对副本进行写操作。写操作结束后,将原容器的引用指向新副本容器,就完成了写的刷新。

从它的实现原理,我们可以看出这种机制是存在缺点的。

1.内存占用:毫无疑问,每次写时需要首先复制一遍原容器,假如复制了很多,或者本身原容器就比较大,那么肯定会占用很多内存。可以采用压缩容器中的元素来防止内存消耗过大。

2.数据一致性问题:当我们在副本中进行写操组时,只能在最终结束后使数据同步,不能实时同步

可以看到,这种机制适用于读操作多,写操作少的应用场景。

  • java.util.concurrent.CopyOnWriteArrayList

    Collection类的线程安全容器主要都是利用的ReentrantLock实现的线程安全,CopyOnWriteArrayList也不例外。在并发写的时候,需要获取lock。读的时候不需要进行lock

  • java.util.concurrent.CopyOnWriteArraySet

    CopyOnWriteArraySet的实现就是基于CopyOnWriteArrayList实现的,采用的装饰器进行实现。二者的区别和List和Set的区别一样。

  • Vector

    一般我们都不用Vector了,不过它确实也是线程安全的。相对于其他容器,能够提供随机访问功能。

3.StringBuffer和StringBuilder

我们知道,String在进行+操作的时候,原生的String会重新新建一个String对象来完成字符串拼接,明显这种操作多了的话会加重服务器负担。因此我们需要的时候就会用StringBuffer和StringBuilder。这二者有什么区别呢?

StringBuffer是线程安全的,StringBuilder不是。从StringBuffer的源码可以看到,它采用的是对方法进行synchronized实现的同步。但是加了同步机制,肯定会对性能有一定影响。

高并发情况下,对数据安全有需求,则用StringBuffer,否则用StringBuilder

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/194519.html原文链接:https://javaforall.net

(0)
上一篇 2025年11月4日 上午11:22
下一篇 2025年11月4日 下午12:01


相关推荐

  • Logstash Grok与Filter插件深度解析:从基础到高级应用

    Logstash Grok与Filter插件深度解析:从基础到高级应用

    2026年3月15日
    2
  • 别买 API 了!ChatGPT 接入 OpenClaw,GPT-5.4 养「龙虾」(保姆级教程)

    别买 API 了!ChatGPT 接入 OpenClaw,GPT-5.4 养「龙虾」(保姆级教程)

    2026年3月14日
    2
  • idea添加tomcat插件_tomcat配置idea

    idea添加tomcat插件_tomcat配置idea配置tomcat插件,一直报错,自己一点儿一点儿排错,一点儿一点儿,心态都要奔溃了,搜索了很多的教程都不行,花了34个小时,终于可以了,下面是错误信息,还有另一个但是我没来的及复制另一个错误信息,抱歉。错误信息:严重:Errorconfiguringapplicationlistenerofclassorg.springframework.web.context.ContextLoaderListenerjava.lang.ClassNotFoundException:org.sp

    2022年10月10日
    6
  • vim设置自动添加头部注释

    vim设置自动添加头部注释

    2021年6月4日
    86
  • Java大数据方向:入行Java大数据值得吗

    Java大数据方向:入行Java大数据值得吗Java 语言的精密和强大 使得这门语言在技术开发领域 始终占据着重要的地位 进入大数据时代以来 Java 作为大数据开发的主流编程语言 其实力再次得到认可 很多人也看好 Java 大数据方向 那么现在入行 Java 大数据值得吗 前景如何呢 大数据的趋势 在这几年的发展当中 已经是显而易见了 而要论大数据的潜力 随着 5G 物联网的加入 大数据还远没有达到顶峰 至少未来 10 年内大数据的发展趋势还会继续保持 人工智能的爆发 将会有更多企业会进入大数据领域 Java 大数据方向 也因此成为很多 Java 老鸟看好的方

    2026年3月26日
    2
  • 江诗丹顿geneve系列推荐大全_江诗丹顿geneve

    江诗丹顿geneve系列推荐大全_江诗丹顿geneve很多腕表印刻有众多的字母,比如“AUTOMATIC”英文,你知道这代表什么意思呢?这是自动机械表的标志,意味着腕表内部设计着上百个机械零件,也可带你感受机械运转的魅力。那么江诗丹顿geneve是什么意思呢?有什么与众不同的意义呢?学习可让你对腕表界有着更多的了解。江诗丹顿geneve是什么意思?有着什么意义呢?“geneve”,这是日内瓦的意思,也可引申为日内瓦印记,此印记有着百年历史,作用是对时…

    2025年8月12日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号