zoukankan      html  css  js  c++  java
  • Java线程安全和非线程安全

    ArrayList是非线程安全的,Vector是线程安全的;HashMap是非线程安全的,HashTable是线程安全的;StringBuilder是非线程安全的,StringBuffer是线程安全的

    什么是线程安全?线程安全和非线程安全有什么区别?分别在什么情况下使用?

    非线程安全是指多线程操作同一个对象可能会出现问题。而线程安全则是多线程操作同一个对象不会有问题。
    线程安全必须要使用很多synchronized关键字(可以防止多个线程同时访问对象中的方法或者某资源)来同步控制,所以必然会导致性能的降低。
    所以在使用的时候,如果是多个线程操作同一个对象,那么使用线程安全的Vector;否则,就使用效率更高的ArrayList。

    非线程安全!=不安全
    有人在使用过程中有一个不正确的观点:我的程序是多线程的,不能使用ArrayList要使用Vector,这样才安全。
    非线程安全并不是多线程环境下就不能使用。注意我上面有说到:多线程操作同一个对象。注意是同一个对象。比如最上面那个模拟,就是在主线程中new的一个ArrayList然后多个线程操作同一个ArrayList对象。
    如果是每个线程中new一个ArrayList,而这个ArrayList只在这一个线程中使用,那么肯定是没问题的。

    线程安全的实现
    线程安全是通过线程同步控制来实现的,也就是synchronized关键字。
    这里实现了一个线程安全的计数器Counter

    public synchronized void addCount(){count++ ;}}

  • 相关阅读:
    UVA
    剑指offer 面试题11
    SharePoint 2013+ Sqlserver 2014 Kerberos 配置传奇, 最终的解决方案 验证。
    ASC(1)G(上升时间最长的序列)
    J2EE它是一个框架?平台?规范?
    C++和python使用struct传输二进制数据结构来实现
    前端开发面试题集(二)
    C语言中<CR>是什么意思
    Delphi ParamStr 使用方法
    打包工具 使用帮助 inno setup
  • 原文地址:https://www.cnblogs.com/gaoxiangde/p/4334379.html
Copyright © 2011-2022 走看看