您好,登錄后才能下訂單哦!
本人剛參加工作,面試的時候遇四道筆試題,其中就有這道多線程有序讀取文件的題目,初看時拿不準,感覺會,又感覺不會。于是放棄了這道題,今天閑下來好好做一遍。
//定義一個runnable接口的實現類 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; //定義每次讀取的字節數 final static int len=256; RunnableImpl() throws IOException{ raf=new RandomAccessFile(file, "rw"); } @Override public void run() { while(true){ try { //synchronized實現多線程的同步 synchronized (raf) { //將文件內容讀取到b字節數組中 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(); }
文件內容截圖
輸出結果:
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。