我想问一下这个实现是否可以,或者可能有一些问题可能会在以后出现问题。
这个想法是实现一个可与“资源尝试”一起使用的 ReentrantLock 类,这意味着它必须实现 AutoCloseable 接口。
另外,我想问一下为什么在'main'方法中编译器产生我必须添加'catch'子句,因为我的close方法(在MyReentrantLock中)不会抛出异常。
import java.util.concurrent.locks.ReentrantLock;
public class Ex09ReentrantLock {
@SuppressWarnings("serial")
public static class MyReentrantLock extends ReentrantLock implements AutoCloseable{
public MyReentrantLock() {
super();
lock();
}
@Override
public void close(){
unlock();
}
}
public static AutoCloseable lock() {
var locker = new MyReentrantLock(); //lock() is called in the constructor
return locker; //implements AutoCloseable
}
//Demo
public static void main(String[] args) {
//try(ReentrantLock lock = new ReentrantLock()){} = compiler error
try(var locker = lock();){
//some work...
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
这个实现好吗?(在构造函数中调用锁......)
如果我的关闭没有引发异常,为什么编译器会强制我添加一个 catch() 子句?