【发布时间】:2012-06-27 21:41:54
【问题描述】:
假设一个多线程应用场景,其中每个线程从网络获取一些数据(一个或多个文件),执行一些处理,然后将结果保存在宿主机的硬盘上。
在这种情况下,总是有可能磁盘空间耗尽,导致意外的服务行为(例如,系统崩溃)。
为了避免这种情况,如果 Java 提供一种保留硬盘空间的方法会很有帮助,但是,正如在 earlier question 中验证的那样,这样的选项不可用,甚至如果是这样,可能会导致分配效率低下(例如,在解压缩应用程序的情况下,它事先不知道解压缩数据的总大小)。
因此,另一种方法可能是进行 “虚拟磁盘空间预留”,例如通过在内存中保留可用空间的静态注册表,并在继续之前让每个线程从注册表中请求容量。
是否有更好的替代方案或改进这种方法?
是否有任何(最好是开源的)Java 库可以实现此类功能?
【问题讨论】:
-
也许我理解错了,但我下面的答案是一种抽象的方式来实现你在 Q 中提出的问题
-
是的,您的回答是实现我上面所说的“虚拟磁盘保留”的合理方法。 :-)