是否使重入锁定为静态并使其成为互斥锁?

时间:2011-04-15 15:08:59

标签: java locking mutex reentrantlock

在Brian Goetz的书“Java Concurrency in Practice”中,他的重入锁定示例编程如下:

Lock lock = new ReentrantLock();

但是,我很想知道是否将上述代码更改为:

private static final Lock lock = new ReentrantLock();

导致锁定现在充当互斥锁,或者它是不必要和多余的。

因此,如果将锁定为private,static和final,那么此代码的功能是否会发生变化?

lock.lock();
try {
    //method stuff
} finally {
    lock.unlock();
}

提前谢谢大家。 马特

2 个答案:

答案 0 :(得分:18)

当然,

finalprivate没有任何影响,但static表示所有实例共享相同的锁定。

因此,如果您有两个实例,则代码块不能同时由两个线程执行。

如果锁不是静态的,则每个实例都有自己的锁。这意味着更多线程可以同时运行代码(当然,取决于它们工作的实例)。

答案 1 :(得分:3)

创建静态锁定等同于

synchronized(MyClass.class){

}

它本质上是一个类级锁

相关问题