synchronized 关键字的作用:
确保线程间能互斥地访问同步块,即同一时间只有一个线程能进入同步块
- 解决了可见性的问题
- 解决了指令重排的问题
- 解决了原子性问题
多个线程有可能同时去访问同一个变量,我们称之为临界资源。
隐式锁(内置锁) - synchronized的使用方法:
1.synchronized 加在方法上面,锁是加在当前类的对象上面,this。
2.synchronized 加在静态方法上面,锁加在当前方法所在类的上面Test.class.
3.synchronized 加在方法中的同步块,自己定义的object上面。
synchronized (object) {
count++;
}
显示锁的使用方法:
显示锁 - ReentrantLock lock = new ReentrantLock();
lock.lock();
count++;
finally{
lock.unock();
}
Synchronize底层原理:
用unsafe方法的如下代码可以代替synchronized并且可跨越方法使用:
<