多线程使用LockFIle,每个线程Lock一部分文件
import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.nio.ByteBuffer;import java.nio.channels.FileChannel;import java.nio.channels.FileLock;public class LockFiles { static final int LENGTH = 1000000; static FileChannel fc ; public static void main(String[] args) throws Exception { File file = new File("D://in.txt"); FileOutputStream fo = new FileOutputStream(file);//可使用OutputStream和RandomAccessFile,使用InputStream会抛出异常NonWritableChannelException fc = fo.getChannel(); ByteBuffer out = ByteBuffer.allocate(LENGTH); for (int i = 0; i < LENGTH; i++) out.put((byte)( 'i'+i)); new LockAndModify(out, 0, 0 + LENGTH / 4); new LockAndModify(out, LENGTH / 3, LENGTH / 3 + LENGTH / 4); } private static class LockAndModify extends Thread { private ByteBuffer buff; private int start, end; LockAndModify(ByteBuffer mbb, int start, int end) { this.start = start; this.end = end; mbb.limit(end); mbb.position(start); buff = mbb.slice(); start(); } public void run() { try { FileLock fl = fc.lock(start, end, false); System.out.println("The Buffer Locked: " + start + " to " + end); while (buff.position() < buff.limit() - 1){ buff.put((byte) (buff.get() + 1)); } fl.release(); System.out.println("The Buffer Released: " + start + " to " + end); } catch (IOException e) { throw new RuntimeException(e); } } }}