![](/img/trans.png)
[英]What is the purpose of fairness parameter in REENTRANT LOCK in JAVA?
[英]What is the equivalent of synchronized( object ) in Reentrant lock in Java?
在下面給出的代碼中。 如何知道 Reentrant Lock 鎖定了哪個對象?
Public class Test {
Map obj1 = new HashMap();
Object ob2 = new Object();
void Method() {
//First
synchronized(ob1) { // Locks obj1
}
synchronized(ob2) { // Locks obj2
}
//Second
Lock lock = new ReentrantLock(); // Which object is getting locked here?
lock.lock();
try {
} finally {
lock.unlock();
}
}
}
在上面的例子中,哪個對象被鎖定了? 如果我想使用可重入鎖顯式鎖定 obj1 和 obj2 怎么可能?
Lock lock = new ReentrantLock(); // Which object is getting locked here? lock.lock();
lock
對象被鎖定在那里。
我想你可能誤解了synchronized(ob1) {...}
作用。 它不會阻止其他線程使用obj1
。 它唯一阻止的是,它阻止其他線程同時在同一對象上同步。
Java(以及大多數其他編程語言/庫)中的鎖是所謂的建議鎖。 “建議”的意思是,程序員必須知道鎖應該保護哪些數據,並且程序員有責任確保程序中的任何線程都不會使用該數據,除非線程鎖定了鎖。
僅供參考:Java 中的“干凈”實踐是以這種方式使用synchronized
:
class MyClass {
private final Object lock = new Object();
private TypeA sharedMemberVariable_a;
private TypeB sharedMemberVariable_b;
...
public SomeType someMethod() {
...
synchronized(lock) {
...access shared member variables...
}
return ...;
}
}
此模式允許您發布MyClass
實例,而無需將lock
對象暴露給調用者。 它還非常清楚地區分了lock
對象本身和受鎖保護的數據/關系。
如果您將來需要這樣做,該模式還可以輕松地從使用synchronized
切換到使用Lock
對象。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.