指标:理解synchronized的含义、明确synchronized关键字修饰普通方法、静态方法和代码块时锁对象的差异。
synchronized是一种同步锁,可以实现同步机制。
同步机制就是对资源进行加锁,保证同一时间只有一个线程可以操作对应资源,避免多线程同时访问相同资源造成冲突。
synchronized可以修饰普通方法、静态方法、代码块
修饰普通方法锁住的是类的实例对象
修饰静态方法锁住的是类对象
修饰代码块包括普通代码块synchronized(obj),效果同修饰通普通方法、静态代码块synchronized(obj.class),效果同修饰静态方法
有如下一个类A
class A {
public synchronized 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() {
}
}
答:二者能构成线程同步,因为两个线程的锁对象是同一个,都是类对象