在多线程应用程序中划分大文件?

时间:2015-06-05 02:39:55

标签: java multithreading algorithm

我在接受采访时被问到这个基本问题,我无法回答:

  

我们如何在多线程之间划分大文件来处理它?如果   我们正在运行一个多线程应用程序,输入是一个大文件   并且我们必须为每个线程提供文件的一部分以使其快速。   我们如何用Java实现它?

有谁能解释我们将如何做到这一点?任何一个例子也将受到赞赏。

2 个答案:

答案 0 :(得分:1)

获得3个起始位置

    File f = new File("xxx");
    long size = f.length();
    long p1 = 0;
    long p2 = f.length() / 3;
    long p3 = p2 + f.length() / 3;

传递位置和长度以读取线程,将文件移动到位置并读取n个字节

    FileInputStream is = new FileInputStream("xxx");
    FileChannel c= is.getChannel();
    c.position(position);
    // read ...

答案 1 :(得分:1)

在一次采访中,回应应该是这是一个消费者 - 生产者问题。 所以你应该有1个生产者线程读取文件并将这些行放在一个同步的集合中,就像Vector一样,你可以让n个消费者线程从集合中获取行并处理它们。

如果有助于准备另一个面试问题可能是:超线程,死锁,忙着等待。

有一些书籍可供采访,例如破解代码访谈,或Java Programming Interviews Exposed。