synchronized
2019-06-05 本文已影响0人
6默默Welsh
synchronized、AtomicXXX、ReentrantLock
synchronized属于java提供的关键字,它的实现是依赖于 jvm 借助于cpu指令的字节码来实现的。
作用于调用对象意味着同一个类创建的两个不同实例调用同一方法或者修饰代码块,线程之间没有影响,各自正常工作。
作用于所有对象意味着同一个类创建的两个不同实例调用同一静态方法或者修饰类,线程之间同样要遵循获取锁原则,同一时间只有一个实例能获取锁
Lock 依赖特殊的 cpu 指令,通过代码实现
AtomicXXX本质上其实不是锁,而是通过CAS自旋(循环尝试去更新,直至成功)与volatile变量互相配合来保证线程安全的更新
ReentrantLock则是基于AQS进行的实现,核心是借助里面CLH队列实现锁的排队策略
根据这三个点做些扩展基本就可以了。
这些在实际在使用时,也需要我们更多的要考虑无锁、使用锁时尽量粒度要小一些。