`
747017186
  • 浏览: 317474 次
社区版块
存档分类
最新评论

java之nio(4)

阅读更多

FileLock

java新IO当中有对文件锁的支持,文件锁主要分为两种:共享锁(读锁)、独占锁(写锁)





 例子1:

 

package nio;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;

public class FileLockTest {
	public static void main(String[] args) throws Exception{
		//读文件
		FileInputStream in = new FileInputStream("F:\\1.txt");
		FileChannel inChannel = in.getChannel();
//		FileLock inFileLock = inChannel.lock();//获取独占所,有异常FileInputStream只能获取共享锁
//		FileLock inFileLock = inChannel.lock(0,in.available(),false);//获取独占所,有异常FileInputStream只能获取共享锁
//		FileLock inFileLock = inChannel.lock(0,in.available(),true);//获取共享锁
		
//		FileLock inFileLock = inChannel.tryLock();//获取独占所,有异常FileInputStream只能获取共享锁
//		FileLock inFileLock = inChannel.tryLock(0,in.available(),false);//获取独占所,有异常FileInputStream只能获取共享锁
		FileLock inFileLock = inChannel.tryLock(0,in.available(),true);//获取共享锁
		inFileLock.release();//锁释放
		inChannel.close();
		in.close();
		
		//写文件
		FileOutputStream out = new FileOutputStream("F:\\1.txt",true);//从文件末尾接着写入,避免之前的内容覆盖
		FileChannel outChannel = out.getChannel();
//		FileLock outFileLock = outChannel.lock();//获取文件的独占锁
//		FileLock outFileLock = outChannel.lock(2,100,true);//获取文件的共享锁
//		FileLock outFileLock = outChannel.lock(2,100,false);//获取文件的独占锁,锁定第2个到100个字节
//		FileLock outFileLock = outChannel.tryLock();//获取文件的独占锁
//		FileLock outFileLock = outChannel.tryLock(2,100,true);//获取文件的共享锁
		FileLock outFileLock = outChannel.tryLock(2,100,false);//获取文件的独占锁,锁定第2个到100个字节
		System.out.println("########");
		outFileLock.release();
		outChannel.close();
		out.close();
	}
	
	private static void printInfo(ByteBuffer buffer) {
		while(buffer.hasRemaining()) {
			System.out.print((char)buffer.get()+"、");
		}
		System.out.println();
	}
}
 上述代码是文件的读锁(共享锁)和写锁(独占锁)的使用方式。共享锁:多个线程可以任意去读、没有任何限制
其中inputStream获取的锁一般都是共享锁。outputstream获取的锁一般都是独占锁
上诉代码独占锁锁定了第2个到100字节。但是另外线程还是可以读取前两个字节的。
看下面的例子:
 例子2:
package nio;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;

public class FileLockTest2 {
	public static void main(String[] args) throws Exception{
		//读文件
		FileInputStream in = new FileInputStream("F:\\1.txt");
		FileChannel inChannel = in.getChannel();
		FileLock inFileLock = inChannel.tryLock(0,in.available(),true);//获取共享锁
		ByteBuffer buffer = ByteBuffer.allocate(1);//只开辟一个缓冲,用于检测FileLockTest中的独占锁的作用
		int temp=0;
		while((temp=inChannel.read(buffer))!=-1){
			buffer.flip();
			printInfo(buffer);
			buffer.clear();
		}
		inFileLock.release();//共享锁释放
		inChannel.close();
		in.close();
	}
	
	private static void printInfo(ByteBuffer buffer) {
		while(buffer.hasRemaining()) {
			System.out.print((char)buffer.get()+"、");
		}
		System.out.println();
	}
}
 运行结果:

 


 
 
 
 

 

  • 大小: 69.9 KB
  • 大小: 174.7 KB
  • 大小: 22.6 KB
分享到:
评论

相关推荐

    java基于NIO实现Reactor模型源码.zip

    java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现Reactor模型源码java基于NIO实现...

    java NIO和java并发编程的书籍

    java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java NIO和java并发编程的书籍java...

    JavaNIO chm帮助文档

    Java NIO系列教程(一) Java NIO 概述 Java NIO系列教程(二) Channel Java NIO系列教程(三) Buffer Java NIO系列教程(四) Scatter/Gather Java NIO系列教程(五) 通道之间的数据传输 Java NIO系列教程(六)...

    java nio 实现socket

    java nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socketjava nio 实现socket

    Java NIO 中文 Java NIO 中文 Java NIO 中文文档

    Java NIO 深入探讨了 1.4 版的 I/O 新特性,并告诉您如何使用这些特性来极大地提升您所写的 Java 代码的执行效率。这本小册子就程序员所面临的有代表性的 I/O 问题作了详尽阐述,并讲解了 如何才能充分利用新的 I/O ...

    Java NIO英文高清原版

    Java NIO英文高清原版

    Java IO NIO and NIO 2 无水印pdf

    Java IO NIO and NIO 2 英文无水印pdf pdf所有页面使用FoxitReader和PDF-XChangeViewer测试都可以打开 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn...

    java nio 包读取超大数据文件

    Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据文件Java nio 超大数据文件 超大数据...

    java NIO 中文版

    讲解了 JavaIO 与 JAVA NIO区别,JAVA NIO设计理念,以及JDK中java NIO中语法的使用

    Pro Java 7 NIO2

    java nio2, Pro Java 7 NIO2

    java_nio学习文档

    java_nio学习文档

    java NIO 视频教程

    Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java 1.4开始),Java NIO提供了与标准IO不同的IO工作方式。 Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,...

    Java NIO 中英文版 + Pro Java 7 NIO.2

    Java NIO,Ron Hitchens 著,中文版 裴小星 译,Pro Java 7 NIO.2,Anghel Leonard 著,pdf文字版带书签,无安全限制

    Java+NIO java nio

    Java+NIO

    java NIO详细教程

    java NIO详细教程,包括使用背景,实现原理,代码实现

    java NIO.zip

    java NIO.zip

    Java IO NIO and NIO 2 epub

    Java IO NIO and NIO 2 英文epub 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Java_NIO类库Selector机制解析.doc

    Java_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.docJava_NIO类库Selector机制解析.doc

    Java.NIO资源下载资源下载

    Java.NIO资源下载资源下载

    Java用NIO读取文件示范

    简单的用Java的NIO读取文件的程序,给大家参考。

Global site tag (gtag.js) - Google Analytics