Java 显式锁 Lock 与条件队列

在 Java 5.0 之前,在协调对共享对象的访问时可以使用的机制只有 synchronized 内置锁和 volatile 关键字。

Java 5.0 增加了一种新的机制:Lock 显式锁,当内置锁 synchronized 不适用时,它就可以作为一种新的选择。

回顾一下内置锁 synchronized 的使用:

// synchronized关键字用法示例
public synchronized void add(int t){// 同步方法
    this.v += t;
}

public static synchronized void sub(int t){// 同步静态方法
    value -= t;
}
public int decrementAndGet(){
    synchronized(obj){// 同步代码块
        return --v;
    }
}

内置锁不需要显式的获取和释放,任何一个对象都能作为一把内置锁。

  • 当 synchronized 作用于普通方法时,锁对象是 this 。
  • 当 synchronized 作用于静态方法时,锁对象是当前类的 Class 对象。
  • 当 synchronized 作用于代码块时,锁对象是 synchronized(obj) 中的这个 obj 对象。

[Read More]

Java 中的静态代理和动态代理

代理模式的使用场景如下:

当无法或不想直接访问某个对象或访问对象存在困难时可以通过一个代理对象来间接访问,为了保证客户端使用的透明性,委托对象与代理对象需要实现相同的接口。

[Read More]