Java 线程锁总结

Java 线程同步:
1、volatile关键字:
Volatile 变量具有 synchronized 的可见性特性,但是不具备原子特性。这就是说线程能够自动发现 volatile 变量的最新值。Volatile 变量可用于提供线程安全,但是只能应用于非常有限的一组用例:多个变量之间或者某个变量的当前值与修改后值之间没有约束。因此,单独使用 volatile 还不足以实现计数器、互斥锁或任何具有与多个变量相关的不变式(Invariants)的类(例如 “start <=end”)。

出于简易性或可伸缩性的考虑,您可能倾向于使用 volatile 变量而不是锁。当使用 volatile 变量而非锁时,某些习惯用法(idiom)更加易于编码和阅读。此外,volatile 变量不会像锁那样造成线程阻塞,因此也很少造成可伸缩性问题。在某些情况下,如果读操作远远大于写操作,volatile 变量还可以提供优于锁的性能优势。
2、synchronize关键字:
修饰实例方法:主要是对类的对象进行锁控制。
修饰静态方法:主要是对Class对象进行锁控制
同步代码块:
synchronize(object){
}
对object对象进行锁控制。
3、对象的 wait(),notify(),notifyAll()方法,调用方法前必时,当前线程必须拥有该对象的锁。
调用对象的wait()方法使当前线程进入阻塞状态,并释放当前锁-pthread也是如此。
调用对象的notify()方法从等待该锁的队列里唤醒一个线程。
调用对象的notifyAll()方法从等待该锁的队列里唤醒所有线程。
4、显示锁Lock接口:
主要实现类ReentrantLock可重入锁,ReentrantReadWriteLock读写锁(含有单独的读锁和写锁)。 调用lock方法进行显示的加锁,调用unlock方法进行锁释放。
5、锁类型:
可重入锁:同一线程在获取了同一对象的锁的并还没有释放时,再次获取该对象的锁。
Compare And Swap比较并交换
CAS 指的是现代 CPU 广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。这个指令会对内存中的共享数据做原子的读写操作。
轻量级锁:在无竞争的情况下使用CAS操作去消除同步使用的互斥量 。 偏向锁:在无竞争的情况下把整个同步都消除掉,连CAS操作都不做了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值