java 文件锁

1:在javaN(new)IO  中提供了文件锁的功能, 这样当一个线程文件锁定后,
其他的线程是无法操作此文件的, 要想进行文件锁定的操作,
则要使用FileLock 类完成, 此类 的对象需要依靠 FileChannel 进行实例化。

2:FileChannel实例化文件锁FileLock 对象的方法:
方法 说明
Public final FileLock  lock()  throws  IOException 获得通道的文件的独占锁定
Public absact FileLock lock(long  postion , long size  boolean shared ) 获得此通道文件给定区域的锁定, 并指定锁定, 锁定区域的大小, 是共享锁(true) 还是独占锁(false)
Public final FileLock tryLock() throws IOException 尝试获取此通道的独占锁定
Public abstract FileLock tryLock(long  postion , long size  boolean shared )尝试 获得此通道文件给定区域的锁定, 并指定锁定, 锁定区域的大小, 是共享锁(true) 还是独占锁(false)


3:  FileLock 的方法
Public  final boolean isShared() 判断锁定是否为共享锁
Public  final FileChannel  chanel() 返回此锁定的FileChannel
Public  abstract  void  release()  throws IOException 释放锁
Pbulic   final  long size() 返回锁定的区域。

4:
锁的定义:
共享锁: 允许多个线程对文件进行读操作。
独占锁: 只允许一个线程进行文件的读写操作。
代码示例
/**
 *java6democom.filelock.demoFileLockDemo.java
 *@authon 李亚希 :2011-2-21
 */
package com.filelock.demo;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;

/**
 * @author Administrator
 */
public class FileLockDemo {
	public static void main(String[] args) {
		try 
		{
			File   f = new File("D:"+File.separator+"liyaxi.txt");
			FileOutputStream    output = null;
			output = new FileOutputStream(f , true); //true 的意思是追加内容
			FileChannel    fc = output.getChannel();
			FileLock    fLock = fc.tryLock();
			if(null != fLock)
			{
				 System.out.println(f.getName()+" 文件被独占锁锁定 30");
				 try {
					Thread.sleep(30000);// 线程休眠3万毫秒
					fLock.release(); //释放锁定
					System.out.println("文件锁定被解除!!!");
				} catch (InterruptedException e) {
					  System.out.println("线程休眠时 发生了   中断异常!");
					e.printStackTrace();
				} 
			}
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}		
	}

}

output = new FileOutputStream(f , true);  这里 true  为了 文件内容不丢失。

效果看附件截图
java 文件锁_第1张图片

你可能感兴趣的:(java,thread,F#)