第二章 线程安全性

来源:互联网 发布:广告宣传单制作软件 编辑:程序博客网 时间:2024/05/29 13:53
线程安全的定义:当多线程访问某个类的时,这个类始终能表现出正确的行为,那么就称这个类是线程安全的。We know it when we see it

线程安全的发生条件:
    1,多线程的环境
    2,访问共享(Shared)和可变(Mutable)状态的访问

无状态定义:它既不包含任何域,也不包含对其他类中域的引用,无状态的对象是线程安全的,servlet是无状态的

原子性:
    原子性操作,count++,非原子性操作,包含了三个独立的操作:读取count值,将值加1,然后将计算写入count
竞态条件:
    在并发编程中,这种由于不恰当的执行时序而出现不正确的结果
注解
    在系统开发中我们可以定义类似@ThreadSafe和@NotThreadSafe这种无侵入的注解,这样,对系统维护人员就非常清楚的知道哪个类是线程安全做过处理的,对排查问题有帮助

使用线程安全类:
    多线程环境,应该使用线程安全的类,譬如Hashtable,StringBuffer
    计数器long 的count++ 可以用java.util.concurrent.atomic包含的一些原子变量类,通过使用AtomicLong来代替long类型计数器,count.incrementAndGet();是原子操作的
    集合可以使用线程安全的集合,Map map = Collections.synchronizedMap(new Hashmap());

确保原子性的方法
    用线程同步synchronized关键字保证同步,修饰范围 代码块,和方法(放在方法返回值的前面)


0 0