在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();
}
提前谢谢大家。 马特
答案 0 :(得分:18)
是
当然, final
和private
没有任何影响,但static
表示所有实例共享相同的锁定。
因此,如果您有两个实例,则代码块不能同时由两个线程执行。
如果锁不是静态的,则每个实例都有自己的锁。这意味着更多线程可以同时运行代码(当然,取决于它们工作的实例)。
答案 1 :(得分:3)
创建静态锁定等同于
synchronized(MyClass.class){
}
它本质上是一个类级锁