Java 并发编程学习(二):synchronize 基本的并发安全保障
synchronize 机制
synchronize 是 Java 内置的一种基本的同步机制,synchronize 将Java中的对象当做锁,更具体的说法是:Java中对象的组成中,有一部分叫做对象头,对象头中有锁标志位。synchronize 实际上是操作对象头里面的标志位,从而达到加锁和释放锁的逻辑。
synchronize 使用
上面说到,synchronize实际上是作用于Java的对象,因此在实际编程中,有这四种使用synchronize的方式(第三种和第四种实际上为同一类)
public class SynchronizeDemo {
private Object lock = new Object();
/**
* 第一种,对SynchronizeDemo.class对象加锁
*/
public static synchronized void test1() {
// do something
}
/**
* 第二种,对当前实例加锁
*/
public synchronized void test2() {
// do something
}
/**
* 第三种,对当前实例加锁
*/
public void test3() {
synchronized (this) {
// do something
}
}
/**
* 第四种,对指定的实例加锁
*/
public void test4() {
synchronized (lock) {
// do something
}
}
}
synchronize 优化
方法尽量不要直接用一个synchronize锁住,应当减小synchronize的粒度。synchronize 最需要锁住的代码是操作共享变量的代码——即可能导致并发不安全的代码,一些既耗时又是线程安全的代码是没有理由放到同步块中的,降低synchronize的粒度能够增加程序的并发性能。