我有一个类,它锁定文件. (请参阅下文.)现在,我有一个单元测试,它断言了同一VM中两个线程之间的成功锁定.但是,实际上我会在两个VM之间使用锁.这就提出了一个问题:如何在单独的进程中启动另一个JVM?
谢谢,
约臣
public class FileLocker {
public static interface StreamAccessor {
InputStream getInputStream();
OutputStream getOutputStream();
}
public static void runLocked(File pFile, Consumer pConsumer) {
Function function = (sa) -> { pConsumer.accept(sa); return null; };
callLocked(pFile, function);
}
public static T callLocked(File pFile, Function pConsumer) {
try (final RandomAccessFile raf = new RandomAccessFile(pFile, "rw");
final FileChannel channel = raf .getChannel();
final FileLock lock = channel.lock()) {
final StreamAccessor sa = new StreamAccessor() {
@Override
public OutputStream getOutputStream() {
return Channels.newOutputStream(channel);
}
@Override
public InputStream getInputStream() {
return Channels.newInputStream(channel);
}
};
final T t = pConsumer.apply(sa);
return t;
} catch (Throwable thr) {
throw Exceptions.show(thr);
}
}
}