• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
seven_hu
博客园    首页    新随笔    联系   管理    订阅  订阅

文件加锁

文件加锁
     可以对同步访问的共享资源文件进行加锁,不过竞争同一个文件的两个线程可能在不同的虚拟机上;或者是一个是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();
    }
}

 

posted @ 2016-03-14 18:52  seven_hu  阅读(606)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3