Java多线程按顺序一行一行读取数据
程序员文章站
2022-07-13 14:56:25
...
废话不多说,直接上运行后的效果,下文讲解,做记录
下面是对应的文本数据
了解Runnable接口,run方法的重写,这里不多解释
认识synchronized关键字,简单描述,同步代码块,方法
package util;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;
/**
* 多线程
*
* @author : L
* @date : 2020-07-14 19:15
**/
public class RunnableImpl implements Runnable{
//定义即将被读取的文件
static File file=new File("C:xx/xx.txt");
//使用io包中的RandomAccessFile类,支持文件的随机访问
static RandomAccessFile raf=null;
public RunnableImpl() throws IOException {
raf=new RandomAccessFile(file, "rw");
}
@Override
public void run() {
while(true){
try {
//设置延迟,方面查看延迟效果
Thread.sleep(5000);
//synchronized实现多线程的同步
synchronized (raf) {
//将文件内容读取到b字节数组中
String sth=raf.readLine();
//如果没读取到,就结束线程
if(sth==null||sth.equals("null")){
return ;
}
//打印文件内容
//Thread.currentThread().getName()获取线程名
System.out.print(Thread.currentThread().getName());
System.out.println("-->"+sth);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package huoxing;
import util.RunnableImpl;
import java.io.IOException;
/**
* 测试多线程
*
* @author : L
* @date : 2020-07-14 19:18
**/
public class Text {
public static void main(String[] args) {
RunnableImpl run= null;
try {
run = new RunnableImpl();
} catch (IOException e) {
e.printStackTrace();
}
//创建三个线程,简单测试
Thread t1=new Thread(run,"小王");
Thread t2=new Thread(run,"小李");
Thread t3=new Thread(run,"小红");
t1.start();
t2.start();
t3.start();
}
}
简单的多线程演示就结束了,代码还可以完善,当然上面的方法不是最好的解决方式,大佬勿喷,学习记录