<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Tom Xu

     

    線程和進程 對文件鎖的操作(RandomAccessFile MappedByteBuffer FileLock)

    1.文件鎖的分類
    文件鎖分為阻塞式文件鎖和非阻塞式的文件鎖,可以通過new FileChannel().tryLock /lock,后者是阻塞式,阻塞式意思是指當前進程沒有獲得文件鎖即刻等待直到有進程將對應文件的鎖釋放。

    2.文件鎖針對進程
    這里指進程的原因是因為對文件鎖而言一個線程同一時間段對同一個文件只能加上一把鎖,只有等待當前線程釋放掉后,才能繼續對文件加鎖,不然會報OverlappingFileLockException的錯誤,所以文件鎖是進程間的鎖。

    3.線程間預防重復加鎖,減少讀寫文件等待時間
    //給該文件加鎖  
                RandomAccessFile fis = new RandomAccessFile(file, "rws"); //單一線程的讀寫同步
                FileChannel fcin=fis.getChannel(); // 獲得文件通道
                FileLock flin=null; //聲明文件鎖對象
                int operateNum=10; //若文件鎖一直別占用,設置最大讀取次數為10次,超出次數表示文 //件不可讀,
                For(int i=0;i<operateNum,i++){ 
                    try {
                            flin = fcin.tryLock(); // 獲取文件非阻塞鎖,如果不能獲取,繼續等待0.5s.
                            break;
                        } catch (Exception e) {
                     System.out.println("有其他線程正在操作該文件,當前線程休眠500毫秒"); 
                     sleep(500);   
                     If((i+1)>=operateNum){
                           Throw e //文件被強制占用 ,處于不可讀的狀態    
                         }    
                    }
                }  
                 //獲取成功
                //進行文件的讀或寫的操作
                RandomAccessFile 流中讀出文件的數據;           
                RandomAccessFile 流向該文件寫入新數據;
                //該文件的操作完畢,釋放該文件鎖和相關資源
                flin.release();
                fcout.close();
                out.close();
    4.線程寫文件加鎖后,讀文件線程不需加鎖的方法(保證讀寫同步)
            寫線程:
                RandomAccessFile fos=new RandomAccessFile(file,"rws");
                FileChannel fileC=fos.getChannel();
                FileLock fileL=null;
                while(true){
                    try{
                        fileL=fileC.lock();
                        break;
                    }catch(Exception e){
                        try {
                            System.out.println("**********************************文件被操作,寫文件線程休眠0.2m");
                            Thread.sleep(200);
                        } catch (InterruptedException e1) {
                            e1.printStackTrace();
                        }
                    }
                }
             /*注意此種方法寫線程必須使用RandomAccessFile,FileOutputStream 會報錯,可能是讀文件時使用文件映射,為保證讀寫*/
             讀線程:
               RandomAccessFile fis=new RandomAccessFile(file,"rws");
               MappedByteBuffer mbb=fis.getChannel().map(FileChannel.MapMode.READ_WRITE, 0, (int)fis.length());
               byte[] buf = new byte[(int) fis.length()];
               for(int i=0;i<fis.length();i++){
                    buf[i]= mbb.get(i);
               }
           /*注意此方法讀線程使用FileInputStream 好像有文件不能同步的問題*/
             

    posted on 2012-10-26 18:34 Tom Xu 閱讀(4197) 評論(1)  編輯  收藏

    評論

    # re: 線程和進程 對文件鎖的操作(RandomAccessFile MappedByteBuffer FileLock) 2012-10-27 19:31 @IT蟲@

    能不能在詳細點啊  回復  更多評論   


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     

    導航

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 野花高清在线观看免费完整版中文| 国产在线19禁免费观看国产 | 吃奶摸下高潮60分钟免费视频| 国产精品亚洲一区二区三区久久| 亚洲中文字幕久久精品无码APP| 久久久久久夜精品精品免费啦| 亚洲精品无码专区在线播放| 亚洲日韩精品无码专区网址| 毛片a级毛片免费播放下载 | 免费无码成人AV在线播放不卡| 亚洲xxxx视频| 亚洲精品国产字幕久久不卡| 成年男女免费视频网站| a在线免费观看视频| 亚洲精品无码久久久久秋霞 | 亚洲人色大成年网站在线观看| 国产91久久久久久久免费| 美丽姑娘免费观看在线观看中文版 | 亚洲综合AV在线在线播放| 中文字幕无码免费久久99| av电影在线免费看| 亚洲熟妇无码AV不卡在线播放| 精品亚洲一区二区| 国产大片91精品免费看3| 国产91免费视频| 你懂的免费在线观看| 狠狠入ady亚洲精品| 亚洲AV成人无码天堂| 亚洲Av永久无码精品三区在线| 精品久久免费视频| aⅴ免费在线观看| a级毛片免费观看视频| 免费无码专区毛片高潮喷水 | 一级毛片大全免费播放| 亚洲精品精华液一区二区| 亚洲美女视频一区二区三区| 亚洲精品高清无码视频| 亚洲性日韩精品国产一区二区| 午夜免费福利影院| 福利免费观看午夜体检区| 91麻豆国产免费观看|