哪些类是线程安全的

生活 2019-07-29 01:42:36 2939

本文收集整理关于哪些类是线程安全的的相关议题,使用内容导航快速到达。

内容导航:

  • Q1:Java哪些集合类是线程安全的
  • Q2:java集合类中哪些是线程安全的
  • Q3:java并发,如何加锁,哪些类是线程安全的
  • Q4:线程安全 问题 如何判断一个类是否是线程安全的
  • Q1:Java哪些集合类是线程安全的

    在集合框架中,有些类是线程安全的,这些都是jdk1.1中的出现的。在jdk1.2之后,就出现许许多多非线程安全的类。 下面是这些线程安全的同步的类:
    vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。
    statck:堆栈类,先进后出
    hashtable:就比hashmap多了个线程安全
    enumeration:枚举,相当于迭代器
    除了这些之外,其他的都是非线程安全的类和接口。
    线程安全的类其方法是同步的,每次只能一个访问。是重量级对象,效率较低。
    其他:
    1. hashtable跟hashmap的区别
    hashtable是线程安全的,即hashtable的方法都提供了同步机制;hashmap不是线程安全的,即不提供同步机制 ;hashtable不允许插入空值,hashmap允许!

    WwW.YIjItao.Co+M

    Q2:java集合类中哪些是线程安全的

    一些历史类的一般是线程安全的,例如:Vector,HashTable等
    在jdk升级后,出现了替代一些集合的类,ArrayList,HashMap等,一般都是线程不安全的。

    Q3:java并发,如何加锁,哪些类是线程安全的

    线程安全是指要控制多个线程对某个资源的有序访问或修改,而在这些线程之间没有产生冲突。
    在Java里,线程安全一般体现在两个方面:
    1、多个thread对同一个java实例的访问(read和modify)不会相互干扰,它主要体现在关键字synchronized。如ArrayList和Vector,HashMap和Hashtable(后者每个方法前都有synchronized关键字)。如果你在interator一个List对象时,其它线程remove一个element,问题就出现了。
    2、每个线程都有自己的字段,而不会在多个线程之间共享。它主要体现在java.lang.ThreadLocal类,而没有Java关键字支持,如像static、transient那样。

    Q4:线程安全 问题 如何判断一个类是否是线程安全的

    线程安全性
    类要成为线程安全的,首先必须在单线程环境中有正确的行为。如果一个类实现正确(这是说它符合规格说明的另一种方式),那么没有一种对这个类的对象的操作序列(读或者写公共字段以及调用公共方法)可以让对象处于无效状态,观察到对象处于无效状态、或者违反类的任何不可变量、前置条件或者后置条件的情况。
    此外,一个类要成为线程安全的,在被多个线程访问时,不管运行时环境执行这些线程有什么样的时序安排或者交错,它必须仍然有如上所述的正确行为,并且在调用的代码中没有任何额外的同步。其效果就是,在所有线程看来,对于线程安全对象的操作是以固定的、全局一致的顺序发生的。
    正确性与线程安全性之间的关系非常类似于在描述 ACID(原子性、一致性、独立性和持久性)事务时使用的一致性与独立性之间的关系:从特定线程的角度看,由不同线程所执行的对象操作是先后(虽然顺序不定)而不是并行执行的。

    相关文章
    线程安全和线程不安全2019-01-20
    java中哪些类是线程安全的2019-06-20
    线程安全的单例模式2019-09-08
    java中实现多线程的两种方法2019-02-18
    cpu怎么选择核心和线程2019-02-23
    多线程有几种实现方法2019-02-28
    如何保证线程顺序执行2019-03-18
    一个线程可以包含多个进程吗2019-10-03
    莫斯科和圣彼得堡安全吗2018-09-01
    去巴基斯坦旅游安全吗2018-09-08