1.线程安全

来源:互联网 发布:英雄传奇刷点卷软件 编辑:程序博客网 时间:2024/06/09 16:35

1.什么是线程安全类

    当多个线程访问一个类时,如果不用考虑这些线程在运行时环境下的交替执行和调度,并且不需要额外的同步以及在调用方代码不必要做其他的协调,这个类的行为依然是正确的,那么这个类是线程安全的类。


2.如何保证线程安全

   1.不要跨线程共享变量 

   2.共享状态变为不可变的 

   3.在任何访问共享变量的时候使用同步


3.原子操作

   1.原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会换到另一个线程)

   2.java.util.concurrent.atomic包下实现了原子操作

   3.java中java.util.concurrent.atomic(CAS理论)+volatile(内存可见性)关键字

   4.a和b各为原子操作,但是a+b不等于原子操作

   5.原子操作可以保证线程安全,volatile关键字保证了内存可见性

    注:原子操作+volatile内存可见性达到了锁的效果

4.锁

   1.锁保证了内存的可见性

   2.锁保证了线程的互斥

   3.锁保证了a和b各为原子操作,但是a+b等于原子操作

   注:锁保证了原子性和内存可见性

0 0