Java实现多线程写数据到文件【队列-文件】
大致流程
先将要写入文件的数据写入到一个队列中,然后单开一个线程专门读取队列数据写入文件,可以保证写入到文件的数据的顺序,
生产者类即多线程写入文件模拟
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实现多线程写数据到文件【队列-文件】相关推荐
- 使用java在后台将数据导出为excel文件
本文主要讲的是怎么使用java将数据导出为Excel文件,xls格式的. 例如:我从前台查询到的数据,要把数据进行导出为excl格式的文件.需要将前台的查询条件(数据)传递到后台,后台拿到数据,写sq ...
- java把mysql大数据量表每个文件最多10MB分批次写入到txt文件中
需求描述: 现在利率报备系统需要把数据上传到第三方系统,表中的数据量非常大,我们需要把表中的数据生成txt文件,然后上传到第三方系统,并且,上传的txt有大小限制,不能超过10MB,后面还需要压缩成z ...
- [Java基础]字节流写数据
- java sqlite 多线程并发_sqlite之多线程总结
12.android 多线程数据库读写分析与优化 11.多线程操作Sqlite? ==== 最新需要给软件做数据库读写方面的优化,之前无论读写,都是用一个 SQLiteOpenHelper.getWr ...
- 【数据读写】csv文件与xls/xlsx文件
目录 一.csv格式与xls/xlsx格式的区别 二.两种文件格式的读写操作 1.csv文件的读/写函数 csvread csvwrite 2.xls/xlsx文件的读/写函数 xlsread xls ...
- java nio 追加写文件_Java NIO在文件末尾追加数据
[java]代码库import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import ja ...
- Java 写数据到文件
private boolean writeToFile(BusGpsBean gpsBean) { String dataStr = DateUtil.date2String(new Date(), ...
- TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和 tf.data.Dataset机制
TensorFlow数据读取机制:文件队列 tf.train.slice_input_producer和tf.data.Dataset机制 之前写了一篇博客,关于<Tensorflow生成自己的 ...
- Hadoop HDFS创建文件/写数据流程、源码详细解析
HDFS创建文件/写数据源码解析 HDFS HDFS写流程 创建文件源码 客户端 DistributedFileSystem DFSClient DFSOutputStream 客户端/Namenod ...
最新文章
- 【NIO】通道Channel
- 批量启用lync用户-3
- 转账示例(二):service层面实现(本例采用QueryRunner来执行sql语句,数据源为C3P0)...
- linux我如何查看一个脚本的路径,linux获取shell脚本所在绝对路径操作介绍
- 直播回顾:准确性提升到 5 秒级,ssar 独创的 load5s 指标有多硬核?| 龙蜥技术
- 9行自定义函数教你用Python发送电子邮件!
- applicationcontext
- Kubernetes学习笔记及重点知识解析
- 动画效果之时间轴对象构造器(即逐个执行动画)
- 动易cms聚合空间最近访客访问地址错误解决方法
- Android apk 系统签名
- 通用crt更新不适用计算机,Office2016安装提示需要通用补丁CRT(KB2999226)
- 大运期间寄往深圳邮件需出示有效身份证件
- 校园 计算机网络设置路由器,Drcom校园网连接路由器怎么设置
- 计算机组成原理保姆级复习资料
- 我为账户和推广计划指定了不同的推广地域,以哪一个为准?
- 数据库应用之(云安全)
- 记第一次实战靶场的经验
- 静下心来看一看花花世界花花人.
- 基于 WEB 的实时事件通知方式 服务器推送
热门文章
- 长连接和短连接区别和优缺点
- 第5章 埃里克森——认同理论
- android alertdialog listview,Android_基础_AlertDialog
- GORM 连接 ORACLE
- CentOS 7.4安装Nginx 1.14.0
- 八代服务器芯片组,Intel八代酷睿全曝光:主板前所未有的混乱
- 魅蓝e2 改android,魅族4月26日发布魅蓝E2究竟要删除什么?
- 2022焊工(初级)考试题库及在线模拟考试
- linux 安装mysql依赖包冲突,使用rpm卸载mysql
- 【第80篇】Lion:优化算法的符号发现