有人問我在接受採訪時這樣基本的問題,我不能回答:在多線程應用程序中劃分大文件?
我們怎麼可以把多線程來處理這之間的一個大的文件?如果 我們正在運行多線程應用程序,並且輸入是一個大文件 ,我們必須爲每個線程提供文件的一部分以使其更快。 我們如何在Java中實現它?
任何人都可以解釋我如何做到這一點?任何例子也將不勝感激。
有人問我在接受採訪時這樣基本的問題,我不能回答:在多線程應用程序中劃分大文件?
我們怎麼可以把多線程來處理這之間的一個大的文件?如果 我們正在運行多線程應用程序,並且輸入是一個大文件 ,我們必須爲每個線程提供文件的一部分以使其更快。 我們如何在Java中實現它?
任何人都可以解釋我如何做到這一點?任何例子也將不勝感激。
得到3個起始位置
File f = new File("xxx");
long size = f.length();
long p1 = 0;
long p2 = f.length()/3;
long p3 = p2 + f.length()/3;
通行證位置和長度以讀取線程,移動文件,以
FileInputStream is = new FileInputStream("xxx");
FileChannel c= is.getChannel();
c.position(position);
// read ...
定位和讀取n個字節在採訪的反應應該是,這是一個消費者 - 生產者問題。 因此,您應該有1個生產者線程讀取文件,並將這些行放入同步集合(如Vector)中,並且您可以讓n個消費者線程從集合中獲取線並處理它們。
如果有助於準備另一次面試,問題可能是:超線程,死鎖,忙碌的等待。
有一些面試書籍,如破解代碼訪談,或Java編程訪談公開。
你見過這個答案:http://topicoverflow.com/questions/17927398/how-to-split-a-large-text-file-into-smaller-chunk-using-java-multithread' – Babel
^請做一個鏈接。 – Skynet
這裏有一個謬誤。磁盤和文件因此不是多線程的。多線程是否會更快,這是值得懷疑的。可能較慢。 – EJP