欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java多线程按顺序一行一行读取数据

程序员文章站 2022-07-13 14:56:25
...

废话不多说,直接上运行后的效果,下文讲解,做记录
Java多线程按顺序一行一行读取数据
下面是对应的文本数据
Java多线程按顺序一行一行读取数据

了解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();

    }
}

简单的多线程演示就结束了,代码还可以完善,当然上面的方法不是最好的解决方式,大佬勿喷,学习记录