-
java多线程读取多个文件的方法
2020-08-25 17:01:35主要为大家详细介绍了java多线程读取多个文件的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 -
java 多线程读取多个文件 和 不用线程读取多个文件
2015-08-07 16:12:40多线程读取多个文件package thread;import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.util.concurrent.CountDownLatch;public class ReadMultiFilesByThread { /** ...多线程读取多个文件
package thread; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.util.concurrent.CountDownLatch; public class ReadMultiFilesByThread { /** * @param args */ public static void main(String[] args) { long startTime = System.currentTimeMillis(); final int thNum = 4; final String filePath3 = "C:\\Users\\IBM_ADMIN\\Downloads\\马达加斯加3全篇英文台词3.txt"; //266M final String filePath2 = "C:\\Users\\IBM_ADMIN\\Downloads\\马达加斯加3全篇英文台词2.txt"; //186M final String filePath = "C:\\Users\\IBM_ADMIN\\Downloads\\马达加斯加3全篇英文台词.txt"; //39KB final String filePath4 = "C:\\Users\\IBM_ADMIN\\Downloads\\carootcert(1).der"; //1KB CountDownLatch doneSignal = new CountDownLatch(thNum); ReadFileThread2 r1 = new ReadFileThread2(doneSignal,filePath); ReadFileThread2 r2 = new ReadFileThread2(doneSignal,filePath2); ReadFileThread2 r3 = new ReadFileThread2(doneSignal,filePath3); ReadFileThread2 r4 = new ReadFileThread2(doneSignal,filePath4); r1.start(); r2.start(); r3.start(); r4.start(); try { doneSignal.await(); } catch (InterruptedException e) { e.printStackTrace(); } long endTime = System.currentTimeMillis(); System.out.println("==============================="); System.out.println("The totally executed time: "+(endTime-startTime)); } } class ReadFileThread2 extends Thread{ private RandomAccessFile raf; private CountDownLatch doneSignal; private final int bufLen = 256; private String path; public ReadFileThread2(CountDownLatch doneSignal,String path){ this.doneSignal = doneSignal; this.path = path; } @Override public void run() { long start = System.currentTimeMillis(); try { raf = new RandomAccessFile(path,"rw"); raf.seek(0); long contentLen = new File(path).length(); long times = contentLen / bufLen +1; byte []buff = new byte[bufLen]; int hasRead = 0; String result = null; for(int i=0;i<times;i++){ hasRead = raf.read(buff); if(hasRead < 0){ break; } result = new String(buff,"gb2312"); } doneSignal.countDown(); } catch (IOException e) { e.printStackTrace(); } long end = System.currentTimeMillis(); System.out.println(getName() + " " + path +" total Time: " + (end - start)); } }
程序部分说明:
分别创建4个线程,读取四个不同大小的文件。
分别计算读取每个文件的时间,然后得到读取4个文件的总时间。java.util.concurrent.CountDownLatch 一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。 await()使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。 countDown()递减锁存器的计数,如果计数到达零,则释放所有等待的线程。 线程执行完读取文件的操作,然后锁存器减一,当4个线程都执行读取文件的操作后,锁存器计数为0,执行await方法后,输出总的读取时间。 加入CountDownLatch 是为了让子线程分别读取完文件后,主线程才能把总的读取时间输出。否则会造成主线程一早就计算时间。
运行结果:
Thread-8 C:\Users\IBM_ADMIN\Downloads\carootcert(1).der total Time: 8 Thread-5 C:\Users\IBM_ADMIN\Downloads\马达加斯加3全篇英文台词.txt total Time: 28 Thread-6 C:\Users\IBM_ADMIN\Downloads\马达加斯加3全篇英文台词2.txt total Time: 4051 Thread-7 C:\Users\IBM_ADMIN\Downloads\马达加斯加3全篇英文台词3.txt total Time: 5190 =============================== The totally executed time: 5194
从结果可以看出,总的运行时间接近那个读取最大文件所用的时间。
===================================
不用线程读取多个文件
package thread; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; public class ReadMultiFilesWithoutThread { /** * @param args */ public static void main(String[] args) { long startTime = System.currentTimeMillis(); ReadMultiFilesWithoutThread read = new ReadMultiFilesWithoutThread(); final String filePath3 = "C:\\Users\\IBM_ADMIN\\Downloads\\马达加斯加3全篇英文台词3.txt"; //266M final String filePath2 = "C:\\Users\\IBM_ADMIN\\Downloads\\马达加斯加3全篇英文台词2.txt"; //186M final String filePath = "C:\\Users\\IBM_ADMIN\\Downloads\\马达加斯加3全篇英文台词.txt"; //39KB final String filePath4 = "C:\\Users\\IBM_ADMIN\\Downloads\\carootcert(1).der"; //1KB read.readFile(filePath); read.readFile(filePath2); read.readFile(filePath3); read.readFile(filePath4); long endTime = System.currentTimeMillis(); System.out.println("==============================="); System.out.println("The totally executed time: "+(endTime-startTime)); } public void readFile(String path){ long start = System.currentTimeMillis(); int bufLen = 256; try { RandomAccessFile raf = new RandomAccessFile(path,"rw"); raf.seek(0); long contentLen = new File(path).length(); long times = contentLen / bufLen +1; byte []buff = new byte[bufLen]; int hasRead = 0; String result = null; for(int i=0;i<times;i++){ hasRead = raf.read(buff); if(hasRead < 0){ break; } result = new String(buff,"gb2312"); } } catch (IOException e) { e.printStackTrace(); } long end = System.currentTimeMillis(); System.out.println( path +" total Time: " + (end - start)); } }
程序部分说明:
分别读取4个大小不同的文件,计算读取每个文件所需的时间。
计算总共的时间。运行结果:
:\Users\IBM_ADMIN\Downloads\马达加斯加3全篇英文台词.txt total Time: 17 C:\Users\IBM_ADMIN\Downloads\马达加斯加3全篇英文台词2.txt total Time: 2983 C:\Users\IBM_ADMIN\Downloads\马达加斯加3全篇英文台词3.txt total Time: 3794 C:\Users\IBM_ADMIN\Downloads\carootcert(1).der total Time: 1 =============================== The totally executed time: 6795
从结果可以看出,总的运行时间接近所有读取所有文件的时间总和。
-
java 多线程读取多个文件
2019-01-02 10:49:34package ... import java.io.*; import java.util.List; import java.util.concurrent.CountDownLatch; ... * 多线程读取多个文件 */ public class FileThread extends Thread{ p...工具类代码如下:
import java.io.*; import java.util.List; import java.util.concurrent.CountDownLatch; /** * 多线程读取多个文件 */ public class FileThread extends Thread{ private final CountDownLatch countDownLatch = new CountDownLatch(10); private int fileIndex; private List<String> filelist; private String filepath = "D:\\LocalFtpServer\\data20181229\\"; private String movepath = "D:\\LocalFtpServer\\data20181229_01\\"; public int getFileIndex() { return fileIndex; } public void setFileIndex(int fileIndex) { this.fileIndex = fileIndex; } public List<String> getFilelist() { return filelist; } public void setFilelist(List<String> filelist) { this.filelist = filelist; } @Override public void run() { for (int i = 0; i < filelist.size(); i++) { if (i % 10 == fileIndex) { //读取文件 File readfile = new File(filepath + filelist.get(i)); InputStreamReader isr = null; try { isr = new InputStreamReader(new FileInputStream(readfile), "UTF-8"); BufferedReader reader = new BufferedReader(isr); String line = null; // 一次读入一行,直到读入null为文件结束 while ((line = reader.readLine()) != null) { System.out.println(line ); } reader.close(); isr.close(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } //读取完后, 移动文件位置 readfile.renameTo(new File(movepath + readfile.getName())); } } countDownLatch.countDown(); } }
调用测试:
public static void main(String[] args) throws IOException { String filepath = "D:\\LocalFtpServer\\data20181229\\"; File file = new File(filepath); //读取目录下所有文件 String[] filelist = file.list(); List<String> fList=new ArrayList<String>(); for (int i = 0; i < filelist.length; i++) { if (filelist[i].startsWith("data") && filelist[i].endsWith(".txt")) { fList.add(filelist[i]); } } for(int i=0;i<30;i++){ FileThread fileThread=new FileThread(); fileThread.setFileIndex(i); fileThread.setFilelist(fList); fileThread.start(); } countDownLatch.await(); }
-
java多线程读取文件_java多线程读取多个文件的方法
2021-02-12 10:51:57本文实例为大家分享了java多线程读取多个文件的具体代码,供大家参考,具体内容如下工具类代码如下:import java.io.*;import java.util.List;import java.util.concurrent.CountDownLatch;/*** 多线程读取多个文件*...本文实例为大家分享了java多线程读取多个文件的具体代码,供大家参考,具体内容如下
工具类代码如下:
import java.io.*;
import java.util.List;
import java.util.concurrent.CountDownLatch;
/**
* 多线程读取多个文件
*/
public class FileThread extends Thread{
private final CountDownLatch countDownLatch = new CountDownLatch(10);
private int fileIndex;
private List filelist;
private String filepath = "D:\\LocalFtpServer\\data20181229\\";
private String movepath = "D:\\LocalFtpServer\\data20181229_01\\";
public int getFileIndex() {
return fileIndex;
}
public void setFileIndex(int fileIndex) {
this.fileIndex = fileIndex;
}
public List getFilelist() {
return filelist;
}
public void setFilelist(List filelist) {
this.filelist = filelist;
}
@Override
public void run() {
for (int i = 0; i < filelist.size(); i++) {
if (i % 10 == fileIndex) {
//读取文件
File readfile = new File(filepath + filelist.get(i));
InputStreamReader isr = null;
try {
isr = new InputStreamReader(new FileInputStream(readfile), "UTF-8");
BufferedReader reader = new BufferedReader(isr);
String line = null;
// 一次读入一行,直到读入null为文件结束
while ((line = reader.readLine()) != null) {
System.out.println(line );
}
reader.close();
isr.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//读取完后, 移动文件位置
readfile.renameTo(new File(movepath + readfile.getName()));
}
}
countDownLatch.countDown();
}
}
调用测试:
public static void main(String[] args) throws IOException {
String filepath = "D:\\LocalFtpServer\\data20181229\\";
File file = new File(filepath);
//读取目录下所有文件
String[] filelist = file.list();
List fList=new ArrayList();
for (int i = 0; i < filelist.length; i++) {
if (filelist[i].startsWith("data") && filelist[i].endsWith(".txt")) {
fList.add(filelist[i]);
}
}
for(int i=0;i<30;i++){
FileThread fileThread=new FileThread();
fileThread.setFileIndex(i);
fileThread.setFilelist(fList);
fileThread.start();
}
countDownLatch.await();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
-
java 多线程读多个文件_java多线程读取多个文件的方法
2021-02-25 19:28:06本文实例为大家分享了java多线程读取多个文件的具体代码,供大家参考,具体内容如下工具类代码如下:import java.io.*;import java.util.List;import java.util.concurrent.CountDownLatch;/*** 多线程读取多个文件*...本文实例为大家分享了java多线程读取多个文件的具体代码,供大家参考,具体内容如下
工具类代码如下:
import java.io.*;
import java.util.List;
import java.util.concurrent.CountDownLatch;
/**
* 多线程读取多个文件
*/
public class FileThread extends Thread{
private final CountDownLatch countDownLatch = new CountDownLatch(10);
private int fileIndex;
private List filelist;
private String filepath = "D:\\LocalFtpServer\\data20181229\\";
private String movepath = "D:\\LocalFtpServer\\data20181229_01\\";
public int getFileIndex() {
return fileIndex;
}
public void setFileIndex(int fileIndex) {
this.fileIndex = fileIndex;
}
public List getFilelist() {
return filelist;
}
public void setFilelist(List filelist) {
this.filelist = filelist;
}
@Override
public void run() {
for (int i = 0; i < filelist.size(); i++) {
if (i % 10 == fileIndex) {
//读取文件
File readfile = new File(filepath + filelist.get(i));
InputStreamReader isr = null;
try {
isr = new InputStreamReader(new FileInputStream(readfile), "UTF-8");
BufferedReader reader = new BufferedReader(isr);
String line = null;
// 一次读入一行,直到读入null为文件结束
while ((line = reader.readLine()) != null) {
System.out.println(line );
}
reader.close();
isr.close();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
//读取完后, 移动文件位置
readfile.renameTo(new File(movepath + readfile.getName()));
}
}
countDownLatch.countDown();
}
}
调用测试:
public static void main(String[] args) throws IOException {
String filepath = "D:\\LocalFtpServer\\data20181229\\";
File file = new File(filepath);
//读取目录下所有文件
String[] filelist = file.list();
List fList=new ArrayList();
for (int i = 0; i < filelist.length; i++) {
if (filelist[i].startsWith("data") && filelist[i].endsWith(".txt")) {
fList.add(filelist[i]);
}
}
for(int i=0;i<30;i++){
FileThread fileThread=new FileThread();
fileThread.setFileIndex(i);
fileThread.setFilelist(fList);
fileThread.start();
}
countDownLatch.await();
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
-
java多线程读取多个文件 导入数据库
2016-10-14 16:59:21多个线程读文件和单个线程读文件,效率差不多,甚至可能不如单线程,原因如下:如果只是单纯的读文件,一个线程足够了,因为一般瓶颈是在磁盘io上,多个线程只会在磁盘io上阻塞。因为不同文件的读写,会造成磁头的... -
多线程读取多个文件(1)(例子)
2013-03-12 09:27:26这个是我写的三个类,用于多线程操作读取文件内容和写入文件内容,不知道是不是你合你味口。 packagepro; import java.io.*; public class ReadFileToWriteOtherFile { private File oldFile; ... -
java中多线程读取同一个文件的不同位置,多线程读取文件
2016-07-21 23:08:57今天遇到一个问题,需要多个...首先我们写个文件,然后多线程读取,以下是我实验的代码:package com.alibaba.middleware.race;import java.io.IOException; import java.io.RandomAccessFile;public class Test2 { pub -
python多线程读取文件-python多线程读取文件的问题
2020-11-11 15:09:26但线程中readlines()就已经全部读完文件了,多线程共同调用同一个文件对象的io方法会造成偏移量错误的问题,你需要锁。(python3 有 os.pread 函数,这个是原子操作,可以不用锁)。这个问题使用线程的效率价值在... -
python多线程读取文件夹下的文件_python多线程读取文件的问题
2021-01-29 18:23:10但线程中readlines()就已经全部读完文件了,多线程共同调用同一个文件对象的io方法会造成偏移量错误的问题,你需要锁。(python3 有 os.pread 函数,这个是原子操作,可以不用锁)。这个问题使用线程的效率价值在... -
python多线程读取同一个文件
2015-05-13 21:36:05python多线程读取同一个文件 多线程读取同一个文件,要求不能重复,不能遗漏。 最开始尝试了一种方法(后来实践证明是无效的) 主线程分配给每个读线程需要读取文件中哪些行, 比如线程1读取1-10行,线程2... -
java多线程读取文件_java多线程读写同一个文件
2021-02-12 10:51:57本文提供java多线程分别定时读写同一个文件的样例,其中两个线程,一个每分钟写入当前时间到指定文件,另一个线程读出每分钟新写的内容。使用简单的Thread.sleep技术实现定时package test.thread;import java.io.... -
Log4j多线程读取多个配置文件
2012-05-31 17:52:18不同的线程读取多个配置文件,输出多个文件 -
多线程不重复读取数据_多线程读取文件
2020-12-10 07:40:11今天写完一个多线程读取文件,发现多线程反而比但线程慢多了;最后还是改成了多进程版本。多线程向多进程的转换也非常的方便,为什么Python多线程反而更慢了?原因就在于 GIL ,在 Cpython 解释器(Python语言的主流... -
java 线程读取文件_Java多线程读取大文件
2021-02-12 15:56:45昨天下午朋友跟我聊起,他说有个需求,需要把上G的txt文件读取写入到数据库。用普通的io结果自然是OOM了,所以果断用NIO技术。为了提高速度,自然还得用上多线程技术。接下来就介绍一下实现思路以及相关的知识点。... -
Java多线程读取大文件
2020-12-22 21:24:55前言 是五一假期第,按理应该是快乐玩耍的日子,... 为了充分利用多线程读取,需要把文件划分成多个区域,供每个线程读取。那么需要有一个算法来计算出每个线程读取的开始位置和结束位置。那么首先根据配置的线程 -
单线程与多线程读取文件
2017-09-06 15:05:35//实验多个线程读取多个文件和单个线程读取多个文件//当文件数量是2-3个时,单线程比多线程更快,可能是没有创建线程之类的开销//文件数量增加到10多个以后,多个线程稍微快一点,但是并没有快多少//按照网上的说法... -
java多线程读取文件_JAVA多线程读写文件范例
2021-02-12 10:51:57在写之前先声明,本文是基于之前在博客园网站上检索到的一份JAVA多线程读写文件的示例,我在写自己的程序时是在那位...针对这样的大文件解析处理,解决方案是使用多个线程,分割读取指定的大文件。获取我们所需要...
-
文件恢复.zip (U盘数据恢复)
-
送别2020年,对HJ-3D心理数字沙盘客户发放意见调查表
-
hilo可以用在mysql吗_NHibernate HiLo在列上其他主键
-
1512端口爆破弱口令工具
-
2021 PHP租车系统 毕业设计 毕设源码 源代码使用教程
-
分页逻辑java_java分页逻辑
-
实验5:流水灯实验.docx
-
opencv3.4.5 cmakeb编译配置文件.
-
DVPN技术介绍.pdf
-
Samba 服务配置与管理
-
hihocoder 1082 java_HihoCoder#1082: 然而沼跃鱼早就看穿了一切
-
MaxScale 实现 MySQL 读写分离与负载均衡
-
RestfulApi服务端.zip
-
git第一次提交
-
FFmpeg4.3系列之16:WebRTC之小白入门与视频聊天的实战
-
Galera 高可用 MySQL 集群(PXC v5.6 + Ngin
-
yarn 全局安装(yarn global add [package])后,命令不生效
-
离线人脸对比产品gj
-
二、数组1(常规数组问题)
-
韦东山—C++快速入门—第三课_C++面向对象编程_上