线程安全之原子性

说明:此片博文理解尚浅,后期会逐步修改。

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.总结

我不喜欢这个世界,我喜欢你
原文地址:https://www.cnblogs.com/truekai/p/10859503.html