分类: Java
2016-07-25 15:18:40
Java按照线程安全的安全程度由强至弱来排序可以分为以下五类:不可变,绝对线程安全,相对线程安全。线程兼容和线程对立。不可变的对象一定是安全的,不可变的对象不需要通过其他锁机制来保证线程安全,如果是一个基本的数据类型只需要在变量前面增加final就可以使其变为不可变,如果是对象,那就需要对象的行为不会对其状态产生影响。比如String类型,他的substring ,replace和concat函数都是返回了一个新的对象,而原对象是不会改变的。也可以通过把带有变量的状态设为final。比如Integer对象中的。
枚举类型,Double,Number,Long,BigInteger,BigDecimal也是不可变类型。但是AtomicInteger(通过 修饰) AtomicLong(Volatile)绝对线程安全,这种类在java中是很少见的,即使所有的方法都加入了Synchronized修饰。但是也不能保证他是绝对的线程安全。相对线程安全就是我们通常所说的线程安全,它需要保证对这个对象单独的操作是线程安全的。