最も簡単なことは、あなたのBufferedReader
. しかし、コンテキストがなければ、これが機能することを保証できません。特に、複数の相互依存呼び出しを行う呼び出しコードがある場合Reader
(その場合、すべての呼び出しが 1 つのsynchronized(reader)
ブロックで行われるようにする必要があります)。
import java.io.IOException;
import java.io.Reader;
import java.nio.CharBuffer;
public class SynchronizedReader extends Reader {
private Reader reader;
public SynchronizedReader(Reader reader) {
super();
this.reader = reader;
}
@Override
public synchronized int read(char[] cbuf, int off, int len) throws IOException {
return reader.read(cbuf, off, len);
}
@Override
public synchronized void close() throws IOException {
reader.close();
}
@Override
public synchronized int hashCode() {
return reader.hashCode();
}
@Override
public synchronized int read(CharBuffer target) throws IOException {
return reader.read(target);
}
@Override
public synchronized int read() throws IOException {
return reader.read();
}
@Override
public synchronized int read(char[] cbuf) throws IOException {
return reader.read(cbuf);
}
@Override
public synchronized boolean equals(Object obj) {
return reader.equals(obj);
}
@Override
public synchronized long skip(long n) throws IOException {
return reader.skip(n);
}
@Override
public synchronized boolean ready() throws IOException {
return reader.ready();
}
@Override
public synchronized boolean markSupported() {
return reader.markSupported();
}
@Override
public synchronized void mark(int readAheadLimit) throws IOException {
reader.mark(readAheadLimit);
}
@Override
public synchronized void reset() throws IOException {
reader.reset();
}
@Override
public synchronized String toString() {
return reader.toString();
}
}