我已经阅读了
this topic,这个
blog article关于尝试使用资源锁定,因为问题突然出现在我脑海中.
但实际上,我更喜欢的是锁定尝试,我的意思是没有锁定实例化.它会让我们从冗长中解脱出来
lock.lock();
try {
//Do some synchronized actions throwing Exception
} finally {
//unlock even if Exception is thrown
lock.unlock();
}
宁愿看起来像:
? implements Unlockable lock ;
...
try(lock) //implicitly calls lock.lock()
{
//Do some synchronized actions throwing Exception
} //implicitly calls finally{lock.unlock();}
所以它不是TWR,而只是一些样板清洁.
您是否有任何技术理由建议描述为什么这不是一个合理的想法?
编辑:澄清我建议和简单的同步(锁定){}块之间的区别,检查此片段:
import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.ReentrantLock;
public class Test {
public static void main(String[] args) {
ReentrantLock locker =new ReentrantLock();
Condition condition = locker.newCondition();
Thread t1 = new Thread("Thread1") {
@Override
public void run(){
synchronized(locker){
try {
condition.await();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
System.out.println("Thread1 finished");
}
}
} ;
Thread t2 = new Thread("Thread2") {
@Override
public void run(){
synchronized(locker){
Thread.yield();
condition.signal();
System.out.println("blabla2");
}
}
} ;
t1.start();
t2.start();
}
}
执行将导致IllegalMonitorStateException,因此不会在synchronized块中隐式调用lock()和unlock()方法.