java多线程有序读取同一个文件
作者:Changshu135 发布时间:2022-05-28 20:41:57
标签:java,多线程,读取文件
本人刚参加工作,面试的时候遇四道笔试题,其中就有这道多线程有序读取文件的题目,初看时拿不准,感觉会,又感觉不会。于是放弃了这道题,今天闲下来好好做一遍。
//定义一个runnable接口的实现类
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
public class RunnableImpl implements Runnable{
//定义文件读取的游标位置
private static int now=0;
//定义即将被读取的文件
static File file=new File("source/error.log");
//使用io包中的RandomAccessFile类,支持文件的随机访问
static RandomAccessFile raf=null;
//定义每次读取的字节数
final static int len=256;
RunnableImpl() throws IOException{
raf=new RandomAccessFile(file, "rw");
}
@Override
public void run() {
while(true){
try {
//synchronized实现多线程的同步
synchronized (raf) {
//将文件内容读取到b字节数组中
byte[] b = new byte[len];
//设置游标位置
raf.seek(now);
int temp=raf.read(b);
//如果没读取到,就结束线程
if(temp==-1){
return ;
}
//设置游标偏移量
now+=temp;
//打印文件内容
System.out.println(new String(b));
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
运行程序,我使用了3个线程
public static void main(String[] args) throws IOException {
RunnableImpl run=new RunnableImpl();
new Thread(run).start();
new Thread(run).start();
new Thread(run).start();
}
文件内容截图
输出结果:
来源:https://blog.csdn.net/Changshu135/article/details/90262616


猜你喜欢
- 创建WebService项目首先安装下.NET Framework4.6.2-4.7.1开发工具。然后就是新建 ASP.NET Web应用程
- 布隆过滤器原理很简单:就是把一个字符串哈希成一个整数key,然后选取一个很长的比特序列,开始都是0,在key把此位置的0变为1;下次进来一个
- 本文实例为大家分享了Android Studio实现弹窗设置的具体代码,供大家参考,具体内容如下弹窗能很好的显示当前处理事情的状态,那么这里
- 泛型中 T 类型变量 和 ? 通配符 区别定义不同 :T 是类型变量,? 是通配符使用范围不同:? 通配符用作 参数类型、字段类型、局部变量
- 一.添加控件IrisSkin2.dll。方法:
- 本文实例为大家分享了C++实现简单酒店管理系统的具体代码,供大家参考,具体内容如下酒店管理系统设计报告一、 需求分析题目要求如下:某酒店有客
- C# 操作符之三元操作符“?:”是什么呢?C# 操作符之三元操作符“?:”有时也称为条件操作符。对条件表达式b?x:y,先计算条件b,然后进
- 首先介绍下JSON的定义,JSON是JavaScript Object Notation的缩写。一种轻量级的数据交换格式,具有良好的可读和便
- 本文实例讲述了C#使用foreach遍历哈希表(hashtable)的方法。分享给大家供大家参考。具体实现方法如下:using System
- 本文讲述了Android应用程序模型之应用程序,任务,进程,线程。分享给大家供大家参考,具体如下:大多数操作系统,在应用程序所寄存的可执行程
- 目录结构:Data.xls数据: 后台页面:public void doGet(HttpServletRequest reques
- Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架。Jackson 社 区相对比较活跃,更新速度
- 1.在实体类中添加@TableId注解:2.在navicat中设置id自动增长:3.测试一下,当我们再次插入的时候,就会看到id4.对注解中
- 本文实例讲述了C# DataTable中Compute方法用法。分享给大家供大家参考,具体如下:Compute函数的参数就两个:Expres
- 本文首先将会回顾Spring 5之前的SpringMVC异常处理机制,然后主要讲解Spring Boot 2 Webflux的全局异常处理机
- in查询 <foreach>循环问题当我在做in查询的时候,发现在网上有很多种写法:接口public List<CaseR
- springboot jackson配置项目中使用的json是jackson。这个呢是spring boot自带的,一开始是用阿里的fast
- 笔者前段时间在做react-native开发,一直是有线连接安卓真机进行调试的。有线调试确实带来诸多麻烦,因为在调试过程中需要频繁和手机进行
- 在工作上,我最近对一个现有的Java项目代码进行了清理。完成之后,我发现了一些反复出现的不规范代码。所以,我把它们整理成了一个列表出来分享给
- 什么是mybatisMyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数