<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.文件鎖針對進程
    這里指進程的原因是因為對文件鎖而言一個線程同一時間段對同一個文件只能加上一把鎖,只有等待當前線程釋放掉后,才能繼續(xù)對文件加鎖,不然會報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(); // 獲取文件非阻塞鎖,如果不能獲取,繼續(xù)等待0.5s.
                            break;
                        } catch (Exception e) {
                     System.out.println("有其他線程正在操作該文件,當前線程休眠500毫秒"); 
                     sleep(500);   
                     If((i+1)>=operateNum){
                           Throw e //文件被強制占用 ,處于不可讀的狀態(tài)    
                         }    
                    }
                }  
                 //獲取成功
                //進行文件的讀或寫的操作
                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蟲@

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


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


    網站導航:
     

    導航

    統(tǒng)計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 97性无码区免费| 免费福利在线播放| 四虎影视精品永久免费网站| 亚洲妓女综合网99| 最近2019年免费中文字幕高清 | 国产真人无码作爱视频免费| 免费va人成视频网站全| 青青草97国产精品免费观看| 又大又粗又爽a级毛片免费看| 午夜亚洲国产精品福利| 亚洲精品国产精品乱码不卡 | 亚洲国产精品成人综合色在线| 成人免费福利电影| 国产精品国产亚洲区艳妇糸列短篇 | 国产成人免费网站在线观看| 亚洲AV无码成人精品区狼人影院 | 亚洲国产精品自在拍在线播放| 美女被爆羞羞网站免费 | 国产成人亚洲综合色影视| 久久国产乱子免费精品| 亚洲av日韩av天堂影片精品| 51在线视频免费观看视频| 亚洲啪啪免费视频| 日本19禁啪啪无遮挡免费动图| 五月天国产成人AV免费观看| 亚洲AV综合色一区二区三区| 114级毛片免费观看| 亚洲女子高潮不断爆白浆| 国产在线19禁免费观看| 福利免费在线观看| 亚洲av无码精品网站| 亚洲w码欧洲s码免费| 亚洲无人区码一二三码区别图片 | 91香焦国产线观看看免费| 亚洲国产精品久久网午夜| 在线成人a毛片免费播放| 午夜不卡AV免费| 亚洲人成电影亚洲人成9999网| 无码中文字幕av免费放| 一级特级aaaa毛片免费观看| 亚洲精品福利网泷泽萝拉|