NIO FileChannel中的文件锁lock 学习笔记
排它锁:又叫独占锁。对文件加排它锁后,该进程可以对此文件进行读写,该进程独 占此文件,其他进程不能读写此文件,直到该进程释放文件锁。
共享锁:某个进程对文件加共享锁,其他进程也可以访问此文件,但这些进程都只能 读此文件,不能写。线程是安全的。只要还有一个进程持有共享锁,此文件就只能读, 不能写
有 4 种获取文件锁的方法:
- lock() //对整个文件加锁,默认为排它锁。
- lock(long position, long size, booean shared) //自定义加锁方式。前 2 个参数 指定要加锁的部分(可以只对此文件的部分内容加锁),第三个参数值指定是否是共 享锁。
- tryLock() //对整个文件加锁,默认为排它锁。
- 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 学习笔记相关推荐
- 数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一)
数据库LINQ TO SQL在Silverlight中的应用(WCF)------学习笔记(一) 步骤: 1. 创建SILVERLIGHT应用程序 2. 创建LINQ TO SQL [注意序列化的问题 ...
- C++ 中 参数包 (typename ...) 学习笔记
C++ 中 参数包 (typename -) 学习笔记 本文所属地址 https://www.lucien.ink 起因 突然好奇 STL 的 std::tuple 是怎么实现不定参数的,遂搜了搜,发 ...
- web前端分享HTML5中的nav标签学习笔记
好程序员web前端分享HTML5中的nav标签学习笔记,nav标签全称navigation,顾名思义,是导航的意思.根据HTML5的相关标准定义如下: "A section of a pag ...
- linux rcs文件中的ip,linux学习笔记之diff和patch命令
关键字:Linux 学习笔记 运维 系统 命令 一.命令的功能 diff命令的功能为逐行比较两个文本文件,列出其不同之处.可是做成diff记录也就是补丁. patch就是利用diff制作的补丁来打到文 ...
- linux中内核中machine_desc,Linux-内核-学习笔记(13):移植三星官方内核
Linux-内核-学习笔记(13):移植三星官方内核 一.移植前的准备 当拿到源代码时,首先要在window下利用SourceInsight创建一个工程,并将uboot源代码加载到SI中,方便修改和查 ...
- textarea中插入标签_HTMLCSS学习笔记(二)-- HTML表单标签
表单 1 : 表单标签 <form></form> 属性 : action = '接口地址' method = 'get / post' name = '表单名称' 2 : 表 ...
- python里数字怎么表示_Python 中的数字—Python 学习笔记
今天讲一下 Python 中六种标准数据类型之一:数字. 整数 整数可以执行加减乘除运算,+代表加法, -代表剪法, *代表乘法./代表除法, %代表求余数: >>> 1+2 3 & ...
- python中continue用法_Python学习笔记之Break和Continue用法分析
本文实例讲述了Python学习笔记之Break和Continue用法.分享给大家供大家参考,具体如下: Python 中的Break 和 Continue break:控制何时循环应该结束 conti ...
- oracle中overwrite写法,【学习笔记】Oracle 11G新特性restart的深入研究案例
[学习笔记]Oracle 11G新特性restart的深入研究案例 时间:2016-11-26 22:35 来源:Oracle研究中心 作者:网络 点击: 次 天萃荷净 Oracle研究中 ...
最新文章
- informix中if else使用_面试官:代码中出现大量的if/else,需要优化,你有什么好方案?...
- GCD BZOJ2818 [省队互测] 数学
- IJCV2021 人脸关键点检测器PIPNet
- U盘的热拔插/自动挂载跟linux2.6 kernel、 udev、 hal、 dbus 、gnome-mount 、thunar的关系...
- c语言api_用C语言来拓展python的功能
- 用法getline(cin,a)和cin.getline(a,20) 能将空格输出
- 简单的webservice发布和测试
- Shp数据批量导入Postgresql工具的原理和设计
- 转四种常见的post请求
- python爆破脚本_snmp爆破(python脚本)
- php提取pdf首页图片,pdf图片怎么提取
- Unity中的特殊的文件夹
- 【白苹果系统镜像】macOS Big Sur 11.6.6正式版(20G608)镜像
- Ensp用windows回环口连接cloud配置
- 更改电脑软件默认安装位置
- 几款常用LED显示屏驱动芯片介绍及选择VK1624
- 小酌重构系列[18]——重命名
- 全连接层替换为卷积层
- 计算机专业转生物信息(bioinformatics)方向必看视频
- 怎样在逆光和恶劣光线下拍人像
热门文章
- C/C++二进制,八进制, 十进制和十六进制的表示方法
- eclipse svn org.tigris.subversion.javahl.ClientException: RA layer request failed
- 快消品行业如何选择进销存软件?
- HTML 禁止网页复制文字图片,右键保存图片,拖拽图片
- [数据分析实践]-音频分析-BirdCLE-2
- Selenium Tips - CSS定位元素
- 服务器协议连接,服务器远程连接提示由于协议错误,客户端无法连接到远程计算机...
- 数据分析-主成分分析
- 如何把npf号码本从三星手机导入android,将联系人导入三星Galaxy的3种方法
- win10 1803官方原版镜像,看不懂我吃 - - -S