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

Swi*_*ton 11 java mutex locking reentrantlock

在Brian Goetz的书"Java Concurrency in Practice"中,他的Reentrant锁的例子编程如下:

Lock lock = new ReentrantLock();
Run Code Online (Sandbox Code Playgroud)

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

private static final Lock lock = new ReentrantLock();
Run Code Online (Sandbox Code Playgroud)

导致锁现在充当互斥锁,或者如果它是不必要和冗余的.

因此,如果将锁定为私有,静态和最终,此代码的功能是否会发生变化?

lock.lock();
try {
    //method stuff
} finally {
    lock.unlock();
}
Run Code Online (Sandbox Code Playgroud)

谢谢大家.马特

Aar*_*lla 18

是.

finalprivate没有影响,当然,而是static意味着所有实例共享相同的锁.

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

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