我在接受采访时被问到这个基本问题,我无法回答:
我们如何在多线程之间划分大文件来处理它?如果 我们正在运行一个多线程应用程序,输入是一个大文件 并且我们必须为每个线程提供文件的一部分以使其快速。 我们如何用Java实现它?
有谁能解释我们将如何做到这一点?任何一个例子也将受到赞赏。
答案 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。