NIO读写文件并加锁
一、读取文件
package lock; import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.util.Calendar; public class ReadFileLock implements Runnable { public void run() {
try {
Calendar calstart = Calendar.getInstance();
Thread.sleep(5000);
File file = new File("D:/test.txt");
// 给该文件加锁
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
FileChannel fileChannel = randomAccessFile.getChannel();
FileLock fileLock = null;
while (true) {
try {
fileLock = fileChannel.tryLock();
break;
} catch (Exception e) {
System.out.println("有其他线程正在操作该文件,当前线程" + Thread.currentThread().getName() + "休眠1000毫秒");
Thread.sleep(1000);
}
}
byte[] buf = new byte[1024];
StringBuffer sb = new StringBuffer();
while ((randomAccessFile.read(buf)) != -1) {
sb.append(new String(buf, "utf-8"));
buf = new byte[850];
} System.err.println(sb.toString()); fileLock.release();
fileChannel.close();
randomAccessFile.close();
randomAccessFile = null; Calendar calend = Calendar.getInstance();
System.out.println("当前线程:" + Thread.currentThread().getName() + ",读文件共花了"
+ (calend.getTimeInMillis() - calstart.getTimeInMillis()) + "秒");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
ReadFileLock threadTarget = new ReadFileLock();
Thread read = new Thread(threadTarget);
read.setName("thread-read-file");
read.start();
Thread read2 = new Thread(threadTarget);
read2.setName("thread-write-file2");
read2.start();
} }
二、写文件
package lock; import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.channels.FileChannel;
import java.nio.channels.FileLock;
import java.util.Calendar; public class ReadFileLock implements Runnable { public void run() {
try {
Calendar calstart = Calendar.getInstance();
Thread.sleep(5000);
File file = new File("D:/test.txt");
// 给该文件加锁
RandomAccessFile randomAccessFile = new RandomAccessFile(file, "rw");
FileChannel fileChannel = randomAccessFile.getChannel();
FileLock fileLock = null;
while (true) {
try {
fileLock = fileChannel.tryLock();
break;
} catch (Exception e) {
System.out.println("有其他线程正在操作该文件,当前线程" + Thread.currentThread().getName() + "休眠1000毫秒");
Thread.sleep(1000);
}
}
byte[] buf = new byte[1024];
StringBuffer sb = new StringBuffer();
while ((randomAccessFile.read(buf)) != -1) {
sb.append(new String(buf, "utf-8"));
buf = new byte[850];
} System.err.println(sb.toString()); fileLock.release();
fileChannel.close();
randomAccessFile.close();
randomAccessFile = null; Calendar calend = Calendar.getInstance();
System.out.println("当前线程:" + Thread.currentThread().getName() + ",读文件共花了"
+ (calend.getTimeInMillis() - calstart.getTimeInMillis()) + "秒");
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
} public static void main(String[] args) {
ReadFileLock threadTarget = new ReadFileLock();
Thread read = new Thread(threadTarget);
read.setName("thread-read-file");
read.start();
Thread read2 = new Thread(threadTarget);
read2.setName("thread-write-file2");
read2.start();
} }
NIO读写文件并加锁的更多相关文章
- php读写文件要加锁
http://www.bubuko.com/infodetail-241753.html
- JAVA NIO之文件通道
1.简介 通道是 Java NIO 的核心内容之一,在使用上,通道需和缓存类(ByteBuffer)配合完成读写等操作.与传统的流式 IO 中数据单向流动不同,通道中的数据可以双向流动.通道既可以读, ...
- java输入输出 -- java NIO之文件通道
一.简介 通道是 Java NIO 的核心内容之一,在使用上,通道需和缓存类(ByteBuffer)配合完成读写等操作.与传统的流式 IO 中数据单向流动不同,通道中的数据可以双向流动.通道既可以读, ...
- php中并发读写文件冲突的解决方案
在这里提供4种高并发读写文件的方案,各有优点,可以根据自己的情况解决php并发读写文件冲突的问题. 对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果 ...
- php中并发读写文件冲突的解决方案(文件锁应用示例)
PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适 ...
- Java读写文件的几种方式
自工作以后好久没有整理Java的基础知识了.趁有时间,整理一下Java文件操作的几种方式.无论哪种编程语言,文件读写操作时避免不了的一件事情,Java也不例外.Java读写文件一般是通过字节.字符和行 ...
- 【自学php】第三天 - 读写文件
这次的例子是把订单的数据保存起来,一般是用数据库来进行数据的存储最好,但是今天目的是为了学习读写文件,所以这次把数据存在文件里. 读写文件有一般有三个步骤: 1)打开文件.如果文件不存在,需要先创建它 ...
- Java NIO 读取文件、写入文件、读取写入混合
前言 Java NIO(new/inputstream outputstream)使用通道.缓冲来操作流,所以要深刻理解这些概念,尤其是,缓冲中的数据结构(当前位置(position).限制(limi ...
- 分享十:php中并发读写文件冲突的解决方案
对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些!用一般的文件操作方法完全没有问题.但如果并发高,在我们对文件进行读写操作时,很有可能多个进程对进一文件进行操作,如果这时不对文件的访问进行相 ...
随机推荐
- java BufferedReader 与 BufferedWriter
BufferedReader 与 BufferedWriter 字符缓冲输入/输出流,是处理流.意味着使用这两个流需要包装节点流. 如节点流FileReader fr = new FileReader ...
- Docker无法启动问题
启动Docker出现如下错误: PolicyKit daemon disconnected from the bus.We are no longer a registered authenticat ...
- 9、后记:公司管理经验总结 - CEO之公司管理经验谈
在前期的公司管理经验谈中,笔者已经将相关考虑到的公司经营的问题做了一些思考和总结,希望能够对广大的想自己创业的IT从业者们提供参考. 这里提供一个连接,能够对广大的初期创业者们有个开公司流程的帮助:h ...
- vlan交换机的端口模式有哪几种
一 端口类型1 ,Access用户模式2 ,Trunk链路模式3 ,Hybrid模式(跟Trunk很类似但比trunk高级)二 端口介绍2.1 ,Access类型端口:只允许默认vlan的以太网帧,也 ...
- Excel连接SSAS提示“传输层中遇到错误”的问题
用Excel连接SSAS,在身份验证时弹出对话框提示“传输层中遇到错误”,后来发现其实就是用户名或密码不对,不知道为何Excel不提示一个明确一点的信息.
- 校验台湾身份证号码的js脚本
网上搜了一下,居然没有,只好自己写一个. //台湾地区身份证校验 function IsTWIdcard(idcard){ if(/^[A-Z][1-2]\d{8}$/.test(idcard)) { ...
- JTextArea利用JScrollpane增加文本域滚轮(滚动条)
JTextArea加滚轮的几种方法 JTextArea txaDisplay = new JTextArea(); JScrollPane scroll = new JScrollPane(txaDi ...
- 可用于在 Microsoft.NET Framework 4.0 中的 ASP.NET 浏览器定义文件的修补程序
http://support.microsoft.com/kb/2600088 此修补程序为 Internet Explorer 和 Mozilla Firefox 在浏览器定义文件引入了更新的定义. ...
- 服务网关zuul之一:入门介绍
通过之前几篇Spring Cloud中几个核心组件的介绍,我们已经可以构建一个简略的(不够完善)微服务架构了.比如下图所示: 我们使用Spring Cloud Netflix中的Eureka实现了服务 ...
- spring AOP 之一:spring AOP功能介绍
一.AOP简介 AOP:是一种面向切面的编程范式,是一种编程思想,旨在通过分离横切关注点,提高模块化,可以跨越对象关注点.Aop的典型应用即spring的事务机制,日志记录.利用AOP可以对业务逻辑的 ...