文件加锁
可以对同步访问的共享资源文件进行加锁,不过竞争同一个文件的两个线程可能在不同的虚拟机上;或者是一个是Java线程,另一个是操作系统中其他的某个本地线程,文件锁对其他操作系统进程是可见的,因为Java的问价加锁直接映射到了本地操作系统的加锁工具。
package solutions; import java.io.FileOutputStream; import java.io.IOException; import java.nio.channels.FileLock; import java.util.concurrent.TimeUnit; /** * Created by Administrator on 2016/3/14. */ public class FileLocking { public static void main(String[] args) throws IOException,InterruptedException{ FileOutputStream fos=new FileOutputStream("src/solutions/hu.txt"); //试图获取文件锁,也可以使用lock()方法来获取文件锁 /* * tryLock()是非阻塞式的,它设法获取锁,但是如果获取不到(当其他的一些进程已经持有相同的锁并且不共享),它 * 将直接从方法调用返回。 * lock()则是阻塞式的,它要阻塞进程直至锁可以获得,或调用lock()的线程中断,或调用lock()的通道关闭。 * */ FileLock fl=fos.getChannel().tryLock(); if(fl!=null){ System.out.println("Locked File"); TimeUnit.MILLISECONDS.sleep(100); fl.release(); System.out.println("Release Lock"); } fos.close(); } }