<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蟲@

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


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


    網站導航:
     

    導航

    統計

    常用鏈接

    留言簿

    隨筆分類

    隨筆檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲欧洲久久久精品| 最近的免费中文字幕视频| 亚洲情a成黄在线观看| 国产精品亚洲精品日韩动图| 四虎成人免费观看在线网址 | 亚洲成在人线aⅴ免费毛片| 100000免费啪啪18免进| 亚洲欧洲自拍拍偷精品 美利坚| 深夜A级毛片视频免费| 亚洲 另类 无码 在线| 乱淫片免费影院观看| 亚洲精品NV久久久久久久久久| 成人免费网站视频www| 亚洲人成色77777| 精品无码无人网站免费视频| 亚洲美女精品视频| 成熟女人牲交片免费观看视频| 亚洲一区欧洲一区| 国产jizzjizz视频全部免费| 午夜成人无码福利免费视频| 亚洲伊人成无码综合网| 免费女人高潮流视频在线观看| 亚洲国产精品美女| 久久九九AV免费精品| 亚洲一级毛片免费在线观看| 妞干网免费视频观看| 成人免费视频一区二区| 亚洲高清日韩精品第一区| 最近中文字幕免费mv视频7| 猫咪免费人成在线网站| 亚洲AV无码久久精品成人| 成人无码区免费A片视频WWW| 午夜亚洲乱码伦小说区69堂| 国产亚洲AV手机在线观看| 18女人水真多免费高清毛片 | 在线播放免费人成视频网站| 久久青青草原亚洲AV无码麻豆 | 成年人免费的视频| 免费一级毛片在线播放视频免费观看永久 | 日本免费一区尤物| 四虎成人精品国产永久免费无码|