Java 线程锁总结

Java 线程同步:
1、volatile关键字:
该关键字语义是,该字修饰的变量需要从共享内存中取值,修改变量后,要及时刷新会共享内存,使该变量变化能被其他线程感知;被修饰的变量变成原子操作,遵循happend-before原则。
2、synchronize关键字:
修饰实例方法:主要是对类的对象进行锁控制。
修饰静态方法:主要是对Class对象进行锁控制
同步代码块:
synchronize(object){
}
对object对象进行锁控制。
3、对象的 wait(),notify(),notifyAll()方法,调用方法前必时,当前线程必须拥有该对象的锁。
调用对象的wait()方法使当前线程进入阻塞状态。
调用对象的notify()方法从等待该锁的队列里唤醒一个线程。
调用对象的notifyAll()方法从等待该锁的队列里唤醒所有线程。
4、显示锁Lock接口:
主要实现类ReentrantLock可重入锁,ReentrantReadWriteLock读写锁(含有单独的读锁和写锁)。 调用lock方法进行显示的加锁,调用unlock方法进行锁释放。
5、锁类型:
可重入锁:同一线程在获取了同一对象的锁的并还没有释放时,再次获取该对象的锁。
Compare And Swap比较并交换
CAS 指的是现代 CPU 广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。这个指令会对内存中的共享数据做原子的读写操作。
轻量级锁:在无竞争的情况下使用CAS操作去消除同步使用的互斥量 。 偏向锁:在无竞争的情况下把整个同步都消除掉,连CAS操作都不做了。

 

posted @ 2017-06-08 17:27  清澈见底  阅读(131)  评论(0编辑  收藏  举报