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

    }
}

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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值