对映射文件的部分加锁

来源:互联网 发布:淘宝拒收不退款怎么办 编辑:程序博客网 时间:2024/05/22 12:29
package io;//: io/LockingMappedFiles.java// Locking portions of a mapped file.// {RunByHand}import java.nio.*;import java.nio.channels.*;import java.io.*;public class LockingMappedFiles {static final int LENGTH = 0xA00000; // 10 MBstatic FileChannel fc;public static void main(String[] args) throws IOException {fc = new RandomAccessFile("test.dat", "rw").getChannel();MappedByteBuffer mbb = fc.map(FileChannel.MapMode.READ_WRITE, 0, LENGTH);for (int i = 0; i < LENGTH; i++) {mbb.put((byte) 'x');}new LockAndModify(mbb, 0, 0 + LENGTH/3);new LockAndModify(mbb, LENGTH/2, LENGTH/2+LENGTH/4);}public static class LockAndModify extends Thread {int start;int end;ByteBuffer bbf;public LockAndModify(ByteBuffer mbb, int start, int end) {this.start = start;this.end = end;mbb.limit(end);mbb.position(start);bbf = mbb.slice();start();}@Overridepublic void run() {try {FileLock fl = fc.lock(start, end, false);System.out.println("Locked " + start + "to " + end);while(bbf.position() < bbf.limit()-1){//put方法会增加position的值bbf.put((byte)(bbf.get()+2));}fl.release();System.out.println("release " + start + "to " + end);} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}} // /:~

 
原创粉丝点击