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的粒度能够增加程序的并发性能。

posted @ 2021-02-02 12:42  陈玉林  阅读(121)  评论(0编辑  收藏  举报