在离开示波器时释放资源(在这种情况下解锁ReadWriteLock)的最佳方式是什么?如何涵盖所有可能的方式(返回,中断,异常等)?Java中的AutoLock - 如何?
2
A
回答
11
一个try/finally块,你可以得到这种行为最接近的事:像迈克说,finally块应该是你的选择
Lock l = new Lock();
l.lock(); // Call the lock before calling try.
try {
// Do some processing.
// All code must go in here including break, return etc.
return something;
} finally {
l.unlock();
}
2
。看到finally block tutorial,其中指出:
的finally块总是执行时 try块退出。这确保 即使 发生意外的异常也会执行finally块。
0
一个更好的方式来做到这一点是使用try-与资源的语句,它可以让你模拟天生C++的RAII mechanism:
public class MutexTests {
static class Autolock implements AutoCloseable {
Autolock(ReentrantLock lock) {
this.mLock = lock;
mLock.lock();
}
@Override
public void close() {
mLock.unlock();
}
private final ReentrantLock mLock;
}
public static void main(String[] args) throws InterruptedException {
final ReentrantLock lock = new ReentrantLock();
try (Autolock alock = new Autolock(lock)) {
// Whatever you need to do while you own the lock
}
// Here, you have already released the lock, regardless of exceptions
}
}
相关问题
- 1. cytoscape.js中的autoungrabify和autolock之间的差异
- 2. iPhone:如何在我的应用程序中设置iphone中的AIRPLANE MODE和AUTOLOCK设置
- 3. Java中的“,?,?,?”转换如何?
- 4. Java的如何在JFrame中
- 5. 如何用StringBuffer的Java中
- 6. 如何组中的Java 8
- 7. 如何在Java中
- 8. 如何在Java中
- 9. 如何在Java中
- 10. 如何从Java中
- 11. 如何在Java中
- 12. 如何在Java中
- 13. 如何在Java中
- 14. 如何在Java中
- 15. 如何在Java中
- 16. 如何在Java中
- 17. 如何在Java中
- 18. 如何在Java中
- 19. 如何在Java中
- 20. 如何在Java中
- 21. 如何在Java中
- 22. 如何在Java中
- 23. 如何在Java中
- 24. 如何在Java中
- 25. 如何在Java中
- 26. 如何在Java中
- 27. 如何在Java中
- 28. 如何在Java中
- 29. 如何在Java中
- 30. 如何在Java中
“l.lock()” 要真正之前被称为“试“根据示例:http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/Lock.html – McDowell 2008-09-30 13:11:00