`

对映射文件的部分加锁

 
阅读更多

  文件映射通常应用于极大的文件,我们可能需要对这种巨大的文件进行部分加锁,以便其他进程可以修改文件中未被加锁的部分。例如:数据库就是这样,因此多个用户可以同时访问它。

看个例子:连个线程分别对文件的不同部分加锁:

package com.wjy.nio;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;

public class LockingMappedFiles {
	static final int LENGTH=0x8FFFFFF;
	static FileChannel fc;
	public static void main(String args[]){
		try {
			fc=new RandomAccessFile("./file/test.dat", "rw").getChannel();
			MappedByteBuffer out=fc.map(FileChannel.MapMode.READ_WRITE, 0, LENGTH);
			for(int i=0;i<LENGTH;i++){
				out.put((byte)'x');
			}
			new LockAndModify(out,0,0+LENGTH/3);
			new LockAndModify(out,LENGTH/2,LENGTH/2+LENGTH/4);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	private static class LockAndModify extends Thread{
		private ByteBuffer buff;
		private int start,end;
		LockAndModify(ByteBuffer mbb,int start,int end){
			this.start=start;
			this.end=end;
			mbb.limit(end);
		     mbb.position(start);
		     buff=mbb.slice();
			start();
		}
		public void run(){
			try {
				FileLock fl=fc.lock(start, end, false);
				System.out.println("Locked: "+start+"  to  "+end);
				while(buff.position()<buff.limit()-1){
					buff.put((byte)(buff.get()+1));
				}
				fl.release();
				System.out.println("Release: "+start+"  to  "+end);
			} catch (Exception e) {
				// TODO: handle exception
			}
		}
	}
}

 注意这里是一个对缓冲区分片的操作:

        mbb.limit(end);           //设置尾部
		     mbb.position(start);  //设置开头
		     buff=mbb.slice();      //分片

 

分享到:
评论

相关推荐

    【路径规划】乌燕鸥算法栅格地图机器人最短路径规划【含Matlab仿真 2886期】.zip

    CSDN Matlab武动乾坤上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【路径规划】生物地理算法栅格地图机器人最短路径规划【含Matlab仿真 2914期】.zip

    CSDN Matlab武动乾坤上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    【路径规划】冠状病毒群体免疫算法栅格地图机器人路径规划【含Matlab仿真 2818期】.zip

    CSDN Matlab武动乾坤上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    在 GPU 上计算的各种样条算法.zip

    在 GPU 上计算的各种样条算法HLSL 着色器通过纹理贴图获取参数,并使用各种算法创建插值 3D 位置的样条网格。与 vvvv (vvvv.org) 一起使用版本0.1丝带phong 定向阴影* 线性插值* 余弦插值* 三次插值* b 样条 (三阶)* tcb-spline(具有张力连续性和偏置控制的 Hermite 插值)* 贝塞尔(三次)* 分段贝塞尔(三次)

    TPLink-TLPS110U-V2-110329打印服务器

    TPLink-TLPS110U-V2-110329打印服务器

    Matlab实现基于MIC-BP最大互信息系数数据特征选择算法结合BP神经网络的数据分类预测(含完整的程序和代码详解)

    内容概要:本文介绍了如何使用Matlab实现基于最大互信息系数(MIC)的数据特征选择算法和BP神经网络进行数据分类预测。首先,通过MIC方法选择与目标变量最相关的特征,然后再利用BP神经网络进行训练和分类。文中详细描述了项目的背景、目标、挑战、特点与创新、应用领域,以及具体的实施步骤和技术细节,包括数据准备、特征选择、BP神经网络构建与训练、模型评估与可视化等。 适合人群:具有基本MATLAB编程技能和机器学习基础知识的研究人员、工程师和数据科学家。 使用场景及目标:① 数据预处理阶段,通过特征选择减少数据维度,提高模型训练效率;② 结合BP神经网络进行高效的数据分类预测,适用于金融、医疗、工业控制等多个领域的复杂数据分类任务。 其他说明:该方法不仅可以显著提高分类预测的准确性,还具有较高的可解释性和适应性,同时提供了丰富的图形化工具帮助用户直观地理解和评估模型性能。

    【路径规划】黑猩猩算法栅格地图机器人最短路径规划【含Matlab仿真 2857期】.zip

    CSDN Matlab武动乾坤上传的资料均有对应的仿真结果图,仿真结果图均是完整代码运行得出,完整代码亲测可用,适合小白; 1、完整的代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    (完整数据)《中国居民收支与生活状况报告》2018-2022

    ## 数据指标说明 《中国居民收支与生活状况报告2022》根据全国住户收支与生活状况调查16万户样本的调查数据,对全国及各省(市、区)的居民收入、消费和生活状况进行全面描述和分析,反映我国城乡居民收入的变化、生活水平的提高、生活状况的改善和居民收入分配格局的现状等。在党的二十大即将召开之际,本书聚焦2021年全国及分地区居民收入和消费水平、居住条件、生活设施以及基本公共服务改善等,同时对十八大以来我国城乡居民的收入分配状况改善情况进行了分析。

    基于 DirectX 12 的一系列渲染教程 .zip

    基于 DirectX 12 的一系列渲染教程。DirectX12 教程本项目是受LearnOpenGL启发,开发一个基于DirectX 12的、以学习为目的的渲染器。完成的基础工作有DirectX 12图形API封装、简易应用框架、基础数学库、obj模型加载等渲染相关算法实现了Tone Mapping、Shadow Mapping、单次大气曝光、IBL、PBR、延迟渲染、Bloom、SSR等另外还有部分算法由朋友合作完成,比如TAA、皮肤渲染等。目录教程 01 - 创建窗口教程 02 - 绘制三角形教程 03 - 绘制立方体教程 04 - 纹理教程 05 - 多顶点流教程 06 - 网格加载器教程 07 - 阴影贴图教程 08 - 大气散射教程 09(1) - IBL 贴图生成器教程 09(2) - IBL+PBR皮肤教程 - 皮肤渲染教程 01 - 创建窗口一个新的工程教程 02 - 绘制三角形渲染一个三角形,参数传递使用Descriptor Table。Root Signature初始化时调用的InitAsDes

    特斯拉Model S 维修手册 - 技术指南及安全操作规范

    内容概要:该文档为特斯拉Model S 的维修手册,详细介绍了车辆各系统的维护与修理方法。手册涵盖了前言、如何使用手册、常见术语和符号、电气安全预防措施、零部件更换与安装、保修政策等内容。每个维修步骤均标有独特的引用编号(FRT),并附有警告、注意和注意事项,强调了合格技术人员进行操作的重要性。 适用人群:汽车维修技师、特斯拉授权服务中心的技术人员以及对电动汽车维修感兴趣的高级用户。 使用场景及目标:适用于特斯拉Model S 车辆的日常维护、故障排查及复杂部件的更换,旨在确保安全、高效地完成各项维修工作,同时保护车主和维修人员的安全。 其他说明:手册内容涉及详细的工艺指导、专用工具的要求及特殊信息,强调在修复后检查和测试的重要性,特别是涉及到安全相关项目时。

    (完整数据)国自然管理学部标书80+份(内附清单)2005-2021年

    (完整数据)国自然管理学部标书80+份(内附清单)2005-2021年 数据指标说明 一、80多本管理科学部中标标书 二、其他附赠材料

    新生自助报到系统 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程.zip

    新生自助报到系统 微信小程序+SSM毕业设计 源码+数据库+论文+启动教程 项目启动教程:https://www.bilibili.com/video/BV1BfB2YYEnS

    (完整数据)中国各省份固定资本存量面板数据2000-2022年

    ## 数据指标说明 资本存量是一国财富总量的重要组成部分,是经济运行的前提和基础。资本存量国民经济核算体系的重要组成部分,其数据是宏观经济政策研究的重要决定因子。 资本存量是计算全要素生产率的基础数据,因此,有不少粉丝有这方面强烈的数据需求,但是资本存量核算在理论与技术两个层面都存在诸多问题难以厘清。

    gulp前端开发脚手架.zip学习资料资源

    linux gulp前端开发脚手架.zip学习资料资源

    将法线贴图从 DirectX (-y) 转换为 OpenGL (+y).zip

    将法线贴图从 DirectX (-y) 转换为 OpenGL (+y)UnityNormalMapInverter将法线贴图从 DirectX (-y) 转换为 OpenGL (+y)“天空在你的眼中?翻转你的 Y” - doctorpangloss这是一个将法线贴图从 DirectX 样式 (-y) 转换为 OpenGL (+y) 的简单工具。为什么有 2 个标准包含相同的信息但配置略有不同?让我很困惑。但我见过太多人在错误的引擎中使用错误的类型,所以我制作了这个编辑器内工具来修复它,它比打开 gimp、将颜色分解为 RGB 组件、反转 G 通道、重新组合和覆盖更容易使用。渲染引擎将使用 DirectX 或 OpenGL 样式的法线。一些常见示例包括OpenGL的统一混合器胡迪尼玛雅Zbrush克隆DirectXUE4/5戈多嚴寒引擎源引擎Substance 设计师/画家我怎么知道我的法线贴图是否有问题?因为它们看起来像这样 如何使用打开 NormalFixer 工具 (工具/NormalMapCorrecter)将

    基于Python的Django框架学生信息管理系统资料齐全+详细文档.zip

    【资源说明】 基于Python的Django框架学生信息管理系统资料齐全+详细文档.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!

    经典分子模拟教程 《The art of molucular dynamics simulation》作者: D.C. Rapaport 出版社:Cambridge Universi

    经典分子模拟教程 《The art of molucular dynamics simulation》作者: D.C. Rapaport 出版社:Cambridge University Press

    适用于 OpenGL 和 DirectX 的定制 3D 游戏引擎.zip

    适用于 OpenGL 和 DirectX 的定制 3D 游戏引擎游戏引擎适用于 OpenGL 和 DirectX 的定制 3D 游戏引擎该引擎不是代码示例,而是为了展示我在图形、架构、3D 数学、工具和网络方面的软件工程技能结构该引擎的结构类似于 Unity 或 Unreal 等 3D 引擎。发动机分为以下几个部件资产是所有网格、材质、纹理和着色器的存储空间。代码包含引擎由图形、数学、用户输入、用户输出和窗口组成。外部具有 Lua 和 OpenGl 的外部库。游戏所有代码都使用各种引擎组件来加载引擎和游戏功能。工具引擎的组件,可以独立运行,引擎在运行时不需要它,主要功能是将所有资产、网格、材质、着色器和纹理转换为二进制格式,放入资产文件夹中,以便游戏在需要时轻松使用。MayaMeshExporter从 Maya 以正确的格式加载网格、顶点和索引。这是由网格生成器访问的文件 Graphics.h、Graphics.cpp Graphics 类的标头/通用实现 Direct3D/Graphics.cpp Graphics 类的 Direct3D

    (完整数据)中国地级市固定资本存量数据2003-2021年

    第一、资本存量计算涉及到许多假定和几个基本的模型,参考文献是最重要的依据:计算中国资本存量最知名的文献就是2篇,一篇是前复旦大学经济学院院长张军老师在2004年写的一篇,发表在《经济研究》上;另一篇是南洋理工大学单豪杰老师2008年写的一篇,发表在《数量技术经济》所以,想要学习资本存量计算的首先应该读懂这2篇之中的一篇。 第二、能够写出计算说明,哪怕简要的也行,譬如参考文献,折旧率,模型等等。 第三、能够提供计算过程,最好还有原始数据来源。 当然,数据也要尽可能新! 1.资料名称:2021-2003年中国地级市固定资本存量数据 2.数据范围:包括两种测算方式,分别为以2011年为基期和以2006年为基期 3.资料范围:包括原始数据、计算过程和最终计算结果,附带参考文献,和文献一致!

    基于射频识别技术实现的大楼人员定位系统【RFID课程设计】

    【作品名称】:基于射频识别技术实现的大楼人员定位系统【RFID课程设计】 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】: ###系统设计 ARM单片机 通过UART与RFID读卡器和Wi-Fi模块连接 电脑 通过Wi-Fi接收下位机数据并通过互联网将数据转发至服务器 服务器 将数据存入数据库,提供功能接口 客户端 通过Http协议连接服务器请求数据 ###功能设计 实时位置:查看当前最新位置 位置记录:查看所有位置记录 信息查询:分类查看位置信息 信息修改:修改/删除 人员/位置信息 信息添加:添加人员/位置信息 ###硬件 MFRC522 STM32 RFID读卡器和阅读器 ###软件 MYSQL数据库 SSH框架 JSP前端 AmazeUI框架 【资源声明】:本资源作为“参考资料”而不是“定制需求”,代码只能作为参考,不能完全复制照搬。需要有一定的基础看懂代码,自行调试代码并解决报错,能自行添加功能修改代码。

Global site tag (gtag.js) - Google Analytics