java多線程有序讀取同一個文件
更新時間:2019年08月29日 14:14:48 作者:Changshu135
這篇文章主要為大家詳細介紹了java多線程有序讀取同一個文件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本人剛參加工作,面試的時候遇四道筆試題,其中就有這道多線程有序讀取文件的題目,初看時拿不準,感覺會,又感覺不會。于是放棄了這道題,今天閑下來好好做一遍。
//定義一個runnable接口的實現(xiàn)類
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RunnableImpl implements Runnable{
//定義文件讀取的游標位置
private static int now=0;
//定義即將被讀取的文件
static File file=new File("source/error.log");
//使用io包中的RandomAccessFile類,支持文件的隨機訪問
static RandomAccessFile raf=null;
//定義每次讀取的字節(jié)數(shù)
final static int len=256;
RunnableImpl() throws IOException{
raf=new RandomAccessFile(file, "rw");
}
@Override
public void run() {
while(true){
try {
//synchronized實現(xiàn)多線程的同步
synchronized (raf) {
//將文件內容讀取到b字節(jié)數(shù)組中
byte[] b = new byte[len];
//設置游標位置
raf.seek(now);
int temp=raf.read(b);
//如果沒讀取到,就結束線程
if(temp==-1){
return ;
}
//設置游標偏移量
now+=temp;
//打印文件內容
System.out.println(new String(b));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
運行程序,我使用了3個線程
public static void main(String[] args) throws IOException {
RunnableImpl run=new RunnableImpl();
new Thread(run).start();
new Thread(run).start();
new Thread(run).start();
}
文件內容截圖

輸出結果:

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
OutOfMemoryError內存不足和StackOverflowError堆棧溢出示例詳解
這篇文章主要為大家介紹了OutOfMemoryError內存不足和StackOverflowError堆棧溢出示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09
webservice實現(xiàn)springboot項目間接口調用與對象傳遞示例
本文主要介紹了webservice實現(xiàn)springboot項目間接口調用與對象傳遞示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-07-07

