java多線程讀取
Ⅰ java多線程同時讀取一個文件,這個方法可行嗎
不可行。每次讀取文件都需要創建緩存文件流,很占內存,而且多次讀取實際上也是一個文件,還不如直接讀取文件,之後通過條件多次獲取需要的內容來的實際。
可以通過BufferedReader 流的形式進行流緩存,之後通過readLine方法獲取到緩存的內容。
BufferedReader bre = null;
try {
String file = "D:/test/test.txt";
bre = new BufferedReader(new FileReader(file));//此時獲取到的bre就是整個文件的緩存流
while ((str = bre.readLine())!= null) // 判斷最後一行不存在,為空結束循環
{
System.out.println(str);//原樣輸出讀到的內容,此處可以添加條件進行不同的處理
};
備註: 流用完之後必須close掉,如上面的就應該是:bre.close(),否則bre流會一直存在,直到程序運行結束。
Ⅱ java中怎麼用多個線程同時對一個文件讀取,最終將文件內容保存到一個位元組數組中去呢
多線程讀取文件在一塊硬碟上沒用,瓶頸在硬碟I/O,而不在CPU和內存。讀取文件時,CPU不用復雜的計算工作,只是數據傳輸而已,多線程反而造成磁頭來回移動,效率不高。如果是兩塊以上的硬碟,可以用不同的線程訪問不同的硬碟,效率比單線程要高
而且多線程操作同一文件除了效率還會有多線程問題,多個線程同時往數組里存數據還會有線程安全問題,如果不同步處理讀取的文件就是錯誤的。
如果讀取的話只能設置每個線程各自讀取偏 移量
讀取文件大小(比如大小是200K)。 2,啟動5個線程,第一個線程讀到40,第二個線程跳過40在讀到80,總之得合理安排好各個線程讀取的大小。這樣才能不重復讀取。大數據處理框架maprece原理和此類似
Ⅲ java一個Socket連接多線程是否能操作兩個讀取流
可以啊 ,不過需要新建兩個實現Runnable 借口的類,重寫run方法,一個實現讀取,另一個實現輸出的功能。再用兩條線程分別操作這兩個方法。