synchronized
* synchronized 关键字用来干什么?
synchronized 关键字用于实现“对象锁” 其他线程访问被锁住的对象时需要等待锁的释放
* synchronized 可以修饰在哪里?
- 方法,以类 A 为例,对于静态方法锁会被添加到 A.class 上,对非静态函数,锁会添加到类
A 的实例上
- 对象
* synchronized 修饰方法的问题是什么?
会阻塞整个对象,即使两个操作不会引起并发冲突
* 如何理解 synchronized 语句?
- 一种粒度更小的加锁方式、只在该加锁的地方加锁,即防止了并发冲突,有节约了开销
不会阻塞整个对象
class Test {
private final Object lock1 = new Object();
private final Object lock2 = new Object();
public void method1() {
synchronized (lock1) {
// 临界区1
}
}
public void method2() {
synchronized (lock2) {
// 临界区2
}
}
}
// 调用方法1 不会阻塞方法2
* synchronized(this) 是不是和 synchronized 方法一样呢?
其实不然 synchronized(this) 可以只锁定特点的代码段