排它锁:又叫独占锁。对文件加排它锁后,该进程可以对此文件进行读写,该进程独 占此文件,其他进程不能读写此文件,直到该进程释放文件锁。

共享锁:某个进程对文件加共享锁,其他进程也可以访问此文件,但这些进程都只能 读此文件,不能写。线程是安全的。只要还有一个进程持有共享锁,此文件就只能读, 不能写

有 4 种获取文件锁的方法:

  1. lock() //对整个文件加锁,默认为排它锁。
  2. lock(long position, long size, booean shared) //自定义加锁方式。前 2 个参数 指定要加锁的部分(可以只对此文件的部分内容加锁),第三个参数值指定是否是共 享锁。
  3. tryLock() //对整个文件加锁,默认为排它锁。
  4. tryLock(long position, long size, booean shared) //自定义加锁方式。 如果指定为共享锁,则其它进程可读此文件,所有进程均不能写此文件,如果某进程 试图对此文件进行写操作,会抛出异常

lock和trylock的区别

lock 是阻塞式的,如果未获取到文件锁,会一直阻塞当前线程,直到获取文件锁 tryLock 和 lock 的作用相同,只不过 tryLock 是非阻塞式的,

tryLock 是尝试获取文 件锁,获取成功就返回锁对象,否则返回 null,不会阻塞当前线程

package FileLock;import NIOTest.channel.FileChannelDemo1;import java.io.*;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;public class FileLockDemo1 {public static void main(String[] args) throws IOException {String input = "走走看看";System.out.println("input = " + input);ByteBuffer buffer = ByteBuffer.wrap(input.getBytes());FileChannel fileChannel = new FileOutputStream("1.txt").getChannel();FileLock lock = fileChannel.lock();System.out.println(lock.isValid());lock.release();fileChannel.write(buffer);fileChannel.close();FileLockDemo1.testLock();}public static void testLock() throws IOException {FileReader fileReader = new FileReader(new File("1.txt"));BufferedReader bufferedReader = new BufferedReader(fileReader);String s = bufferedReader.readLine();System.out.println(s);}
}

NIO FileChannel中的文件锁lock 学习笔记相关推荐

  1. 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)

    数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...

  2. C++ 中 参数包 (typename ...) 学习笔记

    C++ 中 参数包 (typename -) 学习笔记 本文所属地址 https://www.lucien.ink 起因 突然好奇 STL 的 std::tuple 是怎么实现不定参数的,遂搜了搜,发 ...

  3. web前端分享HTML5中的nav标签学习笔记

    好程序员web前端分享HTML5中的nav标签学习笔记,nav标签全称navigation,顾名思义,是导航的意思.根据HTML5的相关标准定义如下: "A section of a pag ...

  4. linux rcs文件中的ip,linux学习笔记之diff和patch命令

    关键字:Linux 学习笔记 运维 系统 命令 一.命令的功能 diff命令的功能为逐行比较两个文本文件,列出其不同之处.可是做成diff记录也就是补丁. patch就是利用diff制作的补丁来打到文 ...

  5. linux中内核中machine_desc,Linux-内核-学习笔记(13):移植三星官方内核

    Linux-内核-学习笔记(13):移植三星官方内核 一.移植前的准备 当拿到源代码时,首先要在window下利用SourceInsight创建一个工程,并将uboot源代码加载到SI中,方便修改和查 ...

  6. textarea中插入标签_HTMLCSS学习笔记(二)-- HTML表单标签

    表单 1 : 表单标签 <form></form> 属性 : action = '接口地址' method = 'get / post' name = '表单名称' 2 : 表 ...

  7. python里数字怎么表示_Python 中的数字—Python 学习笔记

    今天讲一下 Python 中六种标准数据类型之一:数字. 整数 整数可以执行加减乘除运算,+代表加法, -代表剪法, *代表乘法./代表除法, %代表求余数: >>> 1+2 3 & ...

  8. python中continue用法_Python学习笔记之Break和Continue用法分析

    本文实例讲述了Python学习笔记之Break和Continue用法.分享给大家供大家参考,具体如下: Python 中的Break 和 Continue break:控制何时循环应该结束 conti ...

  9. oracle中overwrite写法,【学习笔记】Oracle 11G新特性restart的深入研究案例

    [学习笔记]Oracle 11G新特性restart的深入研究案例 时间:2016-11-26 22:35   来源:Oracle研究中心   作者:网络   点击: 次 天萃荷净 Oracle研究中 ...

最新文章

  1. informix中if else使用_面试官:代码中出现大量的if/else,需要优化,你有什么好方案?...
  2. GCD BZOJ2818 [省队互测] 数学
  3. IJCV2021 人脸关键点检测器PIPNet
  4. U盘的热拔插/自动挂载跟linux2.6 kernel、 udev、 hal、 dbus 、gnome-mount 、thunar的关系...
  5. c语言api_用C语言来拓展python的功能
  6. 用法getline(cin,a)和cin.getline(a,20) 能将空格输出
  7. 简单的webservice发布和测试
  8. Shp数据批量导入Postgresql工具的原理和设计
  9. 转四种常见的post请求
  10. python爆破脚本_snmp爆破(python脚本)
  11. php提取pdf首页图片,pdf图片怎么提取
  12. Unity中的特殊的文件夹
  13. 【白苹果系统镜像】macOS Big Sur 11.6.6正式版(20G608)镜像
  14. Ensp用windows回环口连接cloud配置
  15. 更改电脑软件默认安装位置
  16. 几款常用LED显示屏驱动芯片介绍及选择VK1624
  17. 小酌重构系列[18]——重命名
  18. 全连接层替换为卷积层
  19. 计算机专业转生物信息(bioinformatics)方向必看视频
  20. 怎样在逆光和恶劣光线下拍人像

热门文章

  1. C/C++二进制,八进制, 十进制和十六进制的表示方法
  2. eclipse svn org.tigris.subversion.javahl.ClientException: RA layer request failed
  3. 快消品行业如何选择进销存软件?
  4. HTML 禁止网页复制文字图片,右键保存图片,拖拽图片
  5. [数据分析实践]-音频分析-BirdCLE-2
  6. Selenium Tips - CSS定位元素
  7. 服务器协议连接,服务器远程连接提示由于协议错误,客户端无法连接到远程计算机...
  8. 数据分析-主成分分析
  9. 如何把npf号码本从三星手机导入android,将联系人导入三星Galaxy的3种方法
  10. win10 1803官方原版镜像,看不懂我吃 - - -S