java - 同时读取2个文件,没有更多性能

标签 java multithreading futuretask

我尝试同时读取文件并返回行数

ExecutorService executor = Executors.newFixedThreadPool(2);
FutureTask<Integer> futureOne = new FutureTask<Integer>(new Calcul1());
FutureTask<Integer> futureTwo = new FutureTask<Integer>(new Calcul2());
executor.execute(futureOne);
executor.execute(futureTwo);
while (!(futureOne.isDone() && futureTwo.isDone())) {

}

System.out.println(futureOne.get() + futureTwo.get());
executor.shutdown();

效果很好,但我发现如果我读取文件 1 和文件 2 之后的速度会更快...所以我不会使用 futureTash 获得任何性能提升

为什么?

最佳答案

自旋循环完全浪费了一个核心——这就是线程间信号的用途。如果您只有一张磁盘和两个文件,则根本不会有太大的加速,而且实际上它很可能是负的。如果您的文件位于不同的磁盘上(尤其是具有高延迟连接的网络磁盘),则会有很大的性能提升。

关于java - 同时读取2个文件,没有更多性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11039110/

相关文章:

java - 进行简单回调的最佳方法

java - 带变量的 IF THEN 的正确语法

java - 了解 vector 同步策略

java - 调用FutureTask的run方法时如何消除sonar qube问题?

java - oop 接口(interface)实现以及抽象类

java - 多线程通过列表正确

vb.net - 创建一个在另一个线程上运行的进度条,同时在主线程中保持计算

java - 当两个线程同时执行cache.putIfAbsent时会发生什么?

java - 使用 FutureTask 实现并发

针对 AD (kerberos) 在 Windows 上进行身份验证的 Java 过程