`
imaginecup
  • 浏览: 87405 次
  • 性别: Icon_minigender_1
  • 来自: 西安
社区版块
存档分类
最新评论

java编程思想 IO12 源码 文件加锁

阅读更多
package com.io;
import java.io.*;
import java.nio.channels.FileLock;
import java.util.concurrent.TimeUnit;
public class FileLocking {

	/**
	 * 文件加锁,Java的文件加锁直接映射到了本地操作系统的加锁工具
	 * @throws FileNotFoundException 
	 * @throws Exception 
	 */
	public static void main(String[] args) throws FileNotFoundException, Exception {
		FileOutputStream fos=writeFile("file.txt");
		try {
			FileLock fl=fos.getChannel().tryLock();
			System.out.println(fl.isShared());
			if(fl!=null){
				System.out.println("Lock file:");
				//TimeUnit 表示给定单元粒度的时间段,它提供在这些单元中进行跨单元转换和执行计时及延迟操作的实用工具方法。
				TimeUnit.MILLISECONDS.sleep(100);
				fl.release();
				System.out.println("Released lock");
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		fos.close();
		
	}
	public static FileOutputStream writeFile(String filename){
		FileOutputStream fos=null;
		try {
			fos=new FileOutputStream(filename);
			PrintStream ps=new PrintStream(fos);
			ps.println("面朝大海春暖花开");
		
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return fos;
		
	}

}

package com.io;

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 FileChannel fc;
	static final int LENGTH=0x8FFFFFF;
	public static void main(String[] args) throws IOException {
		fc=new RandomAccessFile("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);

	}
	private static class LockAndModify extends Thread{
		private ByteBuffer buff;
		private int start,end;
		public 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.tryLock(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("Released : "+start+" to"+end);
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
	}

}

 

1
1
分享到:
评论

相关推荐

    java编程思想4th版类库

    《Java编程思想》第四版是Java开发者必备的经典书籍之一,由Bruce Eckel撰写,深入浅出地介绍了Java语言的核心概念和技术。在这个压缩包文件中,包含的主要是与本书相关的类库资源,特别是针对"mindview.net"包的,...

    JAVA编程思想习题及答案

    《JAVA编程思想习题及答案》是一份针对Java编程学习者的宝贵资源,它涵盖了Java语言的核心概念、设计模式以及实际编程技巧。这份资料通过习题的形式帮助学习者深入理解和掌握Java编程思想,同时提供了解答,使学习...

    JAVA编程思想中文版.zip

    《JAVA编程思想》是 Bruce Eckel 的经典著作,中文版为国内Java开发者提供了深入理解Java语言的宝贵资源。这本书全面而深入地介绍了Java编程的核心概念和技术,是学习和提升Java编程技能的重要参考资料。 本书主要...

    Java编程中多种IO API复制文件的性能分析.pdf

    "Java编程中多种IO API复制文件的性能分析" Java编程中提供了多种编程接口进行流、文件、网络的操作。其中,IO API是Java中的一种基本编程接口,用于进行文件、网络、流等操作的输入输出。Java中的IO API可以分为两...

    Java极限编程_src源码源码整理

    - Java标准库:IO流、集合框架、多线程API、网络编程、XML处理等。 3. **源码分析** - 代码结构:模块化、包管理、类与接口设计。 - 设计模式:单例、工厂、观察者、装饰器、适配器、策略等23种设计模式在源码中...

    java 使用IO流实现文件的复制

    在Java编程语言中,文件复制是一项常见的操作,可以用于备份数据、迁移文件或者在程序中处理数据。IO(Input/Output)流是Java提供的一种处理输入输出数据的方式,包括读取和写入文件。本篇文章将详细介绍如何使用...

    JAVA源码Java二进制IO类与文件复制操作实例

    JAVA源码Java二进制IO类与文件复制操作实例

    基于java的开发源码-二进制IO类与文件复制操作实例.zip

    基于java的开发源码-二进制IO类与文件复制操作实例.zip 基于java的开发源码-二进制IO类与文件复制操作实例.zip 基于java的开发源码-二进制IO类与文件复制操作实例.zip 基于java的开发源码-二进制IO类与文件复制操作...

    java编程思想练习题答案

    《Java编程思想》是Bruce Eckel的经典之作,它深入浅出地介绍了Java语言的核心概念和技术。这本书中的练习题是学习者提升技能的重要途径,而这个压缩包提供的就是这些练习题的解答,以源码的形式保存为.java文件。...

    java编程思想习题及答案.rar

    《Java编程思想习题及答案》是一份针对Java编程学习者的宝贵资源,它包含了大量实践题目和详尽的解答,旨在帮助读者深入理解和掌握Java语言的核心概念与技术。这个压缩包包含以下几个部分: 1. `javabcsxxtda.chm`...

    java源码资源Java二进制IO类与文件复制操作实例

    java源码资源Java二进制IO类与文件复制操作实例提取方式是百度网盘分享地址

    (推荐)java编程思想例题源代码和答案.zip

    《Java编程思想》是 Bruce Eckel 的经典著作,这本书深入浅出地讲解了Java语言的各个方面,对于初学者和有经验的程序员来说都是极好的学习资源。提供的压缩包"java编程思想例题源代码和答案.zip"包含了书中部分例题...

    Java编程思想侯捷编译第二版

    《Java编程思想》是Java开发领域的一本经典著作,由美国著名程序员Bruce Eckel撰写,侯捷翻译的中文版在中文读者中广受欢迎。这本书深入浅出地介绍了Java语言的核心概念和技术,对于初学者和有经验的开发者来说,都...

    基于Java的t-io高性能网络编程设计源码

    本项目是一个基于Java语言开发的t-io高性能网络编程项目,包含442个文件,主要文件类型包括Java源代码、BAT批处理文件、XML配置文件、Git忽略文件、文本文件、图片、Shell脚本、属性文件和DOCX文档。系统设计旨在...

    java编程思想

    《Java编程思想》是 Bruce Eckel 的著作,它在编程界享有极高的声誉,被誉为Java学习的经典之作。这本书深入浅出地介绍了Java编程语言的核心概念和技术,为读者提供了全面而深刻的Java理解。中文版的清晰度高,使得...

    java源码:Java二进制IO类与文件复制操作实例.rar

    这个示例源码提供了关于Java二进制IO类和文件复制操作的实际应用,对于学习和理解这一主题非常有用。通过分析和实践这些代码,开发者可以更好地掌握Java的文件处理能力,为日常开发工作奠定坚实基础。

    Java 编程思想.第四版.课后练习答案

    《Java编程思想》是 Bruce Eckel 的经典著作,第四版更是深受广大Java程序员喜爱的一本教程。这本书深入浅出地讲解了Java语言的核心概念和技术,包括面向对象编程、泛型、集合框架、IO流、多线程、网络编程等多个...

    java IO流+socket源码 实现简单文本传输

    Java IO流和Socket是Java编程语言中用于处理输入输出和网络通信的重要概念。在这个示例中,我们将深入探讨如何利用Java IO流与Socket实现简单的文本传输。对于初学者来说,理解这两个概念及其交互是非常关键的。 ...

    Java-Io流,练习

    Java的IO流是Java编程语言中的重要组成部分,它主要用于数据的输入和输出操作。在Java中,IO流被设计为处理任何类型的数据,包括字符、字节甚至对象。本练习旨在帮助初学者理解和掌握Java IO流的基础知识。 一、IO...

Global site tag (gtag.js) - Google Analytics