据我所知,'happens-before' 表明在 synchronized 内部所做的更改对下一个线程可见,在同一个锁上同步。
private final Object closeLock = new Object();
private volatile boolean closed = false;
public void close() throws IOException {
synchronized (closeLock) {
if (closed) {
return;
}
closed = true;
}
if (channel != null) {
channel.close();
}
fd.closeAll(new Closeable() {
public void close() throws IOException {
close0();
}
});
}
不是多余的吗?