线程安全之原子性
说明:此片博文理解尚浅,后期会逐步修改。
0.概要
首先介绍了原子性的概念,然后分别展示了Java中实现原子性的三种方法:Atonic包、synchronized,Lock,最后对三种方式实现做了简单的比较。
1.原子性
提供互斥访问,指的是同一个时刻只能由一个线程来进行操作。
2.原子性之Atomic包
1)CAS(使用了Unsafe.CompareAndSwapxxx方法),这个方法:会通过一个do.while循环来判断工作内存(当前)中的值和主内存(底层)中的值是否一致,直到一致才执行相应的操作。
3.原子性之锁
JDK提供两种锁,一种是synchronized,是Java关键字,依赖JVM去实现锁,那么其在作用对象的作用范围内,同时只有一个线程能进行操作。
其修饰的对象有如下四种:
1)修饰代码块:大括号括起来的部分,作用于调用对象
2)修饰方法:整个方法,作用于调用的对象
3)修饰静态方法:整个静态方法,作用于所有对象
4)修饰类:作用于所有对象
4.原子性对比
synchronized | 不可中断锁,适合线程竞争不激烈,可持续性好 |
Atomic | 竞争激烈时候能维持常态,但只能同步一个值 |
5.总结
我不喜欢这个世界,我喜欢你