ngOnChanges(inputChanges) {
if (inputChanges.pressedUp) {
//do Something
}
if (inputChanges.pressDown) {
//do Something
}
if (inputChanges.pressedEnter) {
//do Something
}
}
} //在上面的例子中我们说lck.lock();然后获得锁定 实际上哪个对象?这是"这个"或者" lck"本身?
即使在"""或" lck"宾语 然后如何差异。线程能够进入关键部分 被同一个"这个"锁定或" lck"对象
案例1:当我们在mark1使用synchronized(this)时 情况2:当我们在标记1处使用synchronized(lck)时。
在这两种情况下,两个循环并行运行。
答案 0 :(得分:3)
lck.lock()
获取的锁定(位于lck
对象上)与synchronized(this)
或synchronized(lck)
获取的锁完全无关。
如果你想保护关键部分,那么所有线程都必须使用相同的锁定机制(和相同的锁)。
java.util.concurrent.locks.Lock
是针对synchronized
关键字不够灵活的情况引入的不同机制。特别是,synchronized
关键字会在执行进入和离开块时自动获取和释放锁。在一个方法中获取锁定是不可能的,将其存储在某个地方,保留方法并在以后某个时间释放锁定。使用Lock
对象,您可以执行这些操作(并且还提供锁定等待超时,而synchronized
可能会永久阻止)。
答案 1 :(得分:0)
@Thilo已经回答了大部分内容,只是为了在你的代码中添加一个点,确保你在finally块中解锁,如下所示,否则,你有可能会结束死锁。
public void lockIt(){
lck.lock();
try {
for(int i=0;i<10;i++) {
System.out.println("i : "+ i);
try{Thread.sleep(200);}catch (Exception e){}
}
} finally { //important
if(lck != null) {
lck.unlock();
}
}
}