小记
- synchronized可作用于instance变量、对象引用、static函数和class上。
每个对象只有一个锁(lock)与之相关联。每一个类也对应一把锁,因此也可将类的静态成员函数声明为 synchronized,以控制其对
类
的静态成员变量的访问,注意这里会锁在“类”上,而不是实例上。synchronized:三个线程(包括main线程)试图进入某个类的三个不同的方法的同步块中,虽然这些同步块处在不同的方法中,但由于是同步到同一个对象(如synchronized (this)),所以对它们的方法依然是互斥的。 但对于以下同步到三个不同的对象,则对临界资源的访问是独立的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18Object o1 = new Object();
Object o2 = new Object();
void m1(){
synchronized (this) {
//..
}
}
void m2(){
synchronized (o1) {
//..
}
}
void m3(){
synchronized (o2) {
//..
}
}
synchronized使用
synchronized method(){}
对该类的同一个对象来说,只要一个线程访问了其中的一个synchronized方法,其它线程不能同时访问这个对象中任何一个synchronized方法。而不同的对象则是互不干扰的。synchronized static method{}
对该类的所有对象起作用。- synchronized关键字是不能继承的
synchronized实现原理
待续。