大致流程

先将要写入文件的数据写入到一个队列中,然后单开一个线程专门读取队列数据写入文件,可以保证写入到文件的数据的顺序,

生产者类即多线程写入文件模拟

package com.ldl.test.domain;import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ConcurrentLinkedQueue;/*** 将数据保存到队列中(生产者)* @author liam**/
public class SaveDataToQueue implements Runnable{private ConcurrentLinkedQueue<String> queue;private String data;public SaveDataToQueue(ConcurrentLinkedQueue<String> queue, String data) {this.queue = queue;this.data = data;}@Overridepublic void run() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:hh:ss sss");data = sdf.format(new Date())+":"+data;System.out.println(data);queue.add(data);}}

消费者类(将队列数据写入文件)

package com.ldl.test.domain;import java.io.BufferedWriter;
import java.io.IOException;
import java.util.concurrent.ConcurrentLinkedQueue;/*** 将队列中的数据写进文件中(消费者)* @author liam**/
public class PutDataToFile implements Runnable {private ConcurrentLinkedQueue<String> queue;private BufferedWriter buff;public PutDataToFile(ConcurrentLinkedQueue<String> queue, BufferedWriter buff) {super();this.queue = queue;this.buff = buff;}@Overridepublic void run() {while(true){if(!queue.isEmpty()){try {buff.write(queue.poll());buff.newLine();buff.flush();} catch (IOException e) {e.printStackTrace();}  }}}}

测试类

package com.ldl.test.controller;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.concurrent.ConcurrentLinkedQueue;import com.ldl.test.domain.PutDataToFile;
import com.ldl.test.domain.SaveDataToQueue;/*** * @author liam**/
public class WriteFileFromQueue {public static void main(String[] args) {//获取当前类所在的包/*File fileB = new File(WriteFileFromQueue.class.getResource("").getPath());System.out.println("fileB path: " + fileB); *///获取当前类所在的工程名
//      System.out.println(System.getProperty("user.dir"));FileWriter fw= null;BufferedWriter bufw= null;try {File file = new File(System.getProperty("user.dir")+File.separator+"upload"+File.separator+"liam.txt");if(!file.exists()){//file.mkdirs();file.createNewFile();}fw=new FileWriter(file,true);  bufw=new BufferedWriter(fw);} catch (IOException e) {e.printStackTrace();} ConcurrentLinkedQueue<String> queue = new ConcurrentLinkedQueue<>();for(int i = 0; i < 10; i++){new Thread(new SaveDataToQueue(queue, "写入数据为:  "+i)).start();}new Thread(new PutDataToFile(queue, bufw)).start();;}}

测试结果

以上内容,仅作为记录本次练习使用

Java实现多线程写数据到文件【队列-文件】相关推荐

  1. 使用java在后台将数据导出为excel文件

    本文主要讲的是怎么使用java将数据导出为Excel文件,xls格式的. 例如:我从前台查询到的数据,要把数据进行导出为excl格式的文件.需要将前台的查询条件(数据)传递到后台,后台拿到数据,写sq ...

  2. java把mysql大数据量表每个文件最多10MB分批次写入到txt文件中

    需求描述: 现在利率报备系统需要把数据上传到第三方系统,表中的数据量非常大,我们需要把表中的数据生成txt文件,然后上传到第三方系统,并且,上传的txt有大小限制,不能超过10MB,后面还需要压缩成z ...

  3. [Java基础]字节流写数据

  4. java sqlite 多线程并发_sqlite之多线程总结

    12.android 多线程数据库读写分析与优化 11.多线程操作Sqlite? ==== 最新需要给软件做数据库读写方面的优化,之前无论读写,都是用一个 SQLiteOpenHelper.getWr ...

  5. 【数据读写】csv文件与xls/xlsx文件

    目录 一.csv格式与xls/xlsx格式的区别 二.两种文件格式的读写操作 1.csv文件的读/写函数 csvread csvwrite 2.xls/xlsx文件的读/写函数 xlsread xls ...

  6. java nio 追加写文件_Java NIO在文件末尾追加数据

    [java]代码库import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import ja ...

  7. Java 写数据到文件

    private boolean writeToFile(BusGpsBean gpsBean) { String dataStr = DateUtil.date2String(new Date(), ...

  8. TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和 tf.data.Dataset机制

    TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和tf.data.Dataset机制 之前写了一篇博客,关于<Tensorflow生成自己的 ...

  9. Hadoop HDFS创建文件/写数据流程、源码详细解析

    HDFS创建文件/写数据源码解析 HDFS HDFS写流程 创建文件源码 客户端 DistributedFileSystem DFSClient DFSOutputStream 客户端/Namenod ...

最新文章

  1. 【NIO】通道Channel
  2. 批量启用lync用户-3
  3. 转账示例(二):service层面实现(本例采用QueryRunner来执行sql语句,数据源为C3P0)...
  4. linux我如何查看一个脚本的路径,linux获取shell脚本所在绝对路径操作介绍
  5. 直播回顾:准确性提升到 5 秒级,ssar 独创的 load5s 指标有多硬核?| 龙蜥技术
  6. 9行自定义函数教你用Python发送电子邮件!
  7. applicationcontext
  8. Kubernetes学习笔记及重点知识解析
  9. 动画效果之时间轴对象构造器(即逐个执行动画)
  10. 动易cms聚合空间最近访客访问地址错误解决方法
  11. Android apk 系统签名
  12. 通用crt更新不适用计算机,Office2016安装提示需要通用补丁CRT(KB2999226)
  13. 大运期间寄往深圳邮件需出示有效身份证件
  14. 校园 计算机网络设置路由器,Drcom校园网连接路由器怎么设置
  15. 计算机组成原理保姆级复习资料
  16. 我为账户和推广计划指定了不同的推广地域,以哪一个为准?
  17. 数据库应用之(云安全)
  18. 记第一次实战靶场的经验
  19. 静下心来看一看花花世界花花人.
  20. 基于 WEB 的实时事件通知方式 服务器推送

热门文章

  1. 长连接和短连接区别和优缺点
  2. 第5章 埃里克森——认同理论
  3. android alertdialog listview,Android_基础_AlertDialog
  4. GORM 连接 ORACLE
  5. CentOS 7.4安装Nginx 1.14.0
  6. 八代服务器芯片组,Intel八代酷睿全曝光:主板前所未有的混乱
  7. 魅蓝e2 改android,魅族4月26日发布魅蓝E2究竟要删除什么?
  8. 2022焊工(初级)考试题库及在线模拟考试
  9. linux 安装mysql依赖包冲突,使用rpm卸载mysql
  10. 【第80篇】Lion:优化算法的符号发现