####指标:理解synchronized的含义、明确synchronized关键字修饰普通方法、静态方法和代码块时锁对象的差异。
```
有如下一个类A
class A {
public void a() {
}
public synchronized void b() {
}
}
然后创建两个对象
A a1 = new A();
A a2 = new A();
然后在两个线程中并发访问如下代码:
Thread1 Thread2
a1.a(); a2.a();
请问二者能否构成线程同步?
如果A的定义是下面这种呢?
class A {
public static synchronized void a() {
}
public static synchronized void b() {
}
}
```
###回答:
synchronized是java的一个关键字,保持线程同步的一种机制,同步锁的一种,在同一个时间段里只有一个线程能对一个资源进行操作.
修饰方法时,是遵循一个对象一个锁的规律,每个对象都有一个内部锁。
1、修饰普通方法,不构成同步,两个对象分别对应两个不同的锁,线程a1对代码块进行读写的时候,不能保证线程同步。
2、修饰静态方法,构成同步,static关键字对该代码块形成了同一个锁,它的锁是对象锁,a1在对该类对象进行操作的时候,会形成阻塞。
网友评论