重入锁
一个线程对同一个对象多次加锁(我认为很有可能会发生锁合并)
举个例子:
static class Test {
public static synchronized void say() {
dosomething();
}
public static synchronized void dosomething() {
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
这里是一个方法加锁了,调用了另一个对象的加锁方法;还有一种情形是递归加锁,如果放到上面的例子中,就是say方法中,再次synchronized(this)
独占锁与共享锁
A对O加上了共享锁,其他事务只能对O加上共享锁,而不能加上独占锁,这保证了在读的时候,数据不会被修改。
公平锁与非公平锁
公平锁就是谁先申请这个锁,谁就可以在锁被释放后,先获取锁,按到来的先后顺序;非公平锁反之