「java多线程读取」java多线程读取大文件并解析入库

博主:adminadmin 2022-12-01 04:30:09 51

今天给各位分享java多线程读取的知识,其中也会对java多线程读取大文件并解析入库进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java中怎么用多个线程同时对一个文件读取,最终将文件内容保存到一个字节数组中去呢?

多线程读取文件在一块硬盘上没用,瓶颈在硬盘I/O,而不在CPU和内存。读取文件时,CPU不用复杂的计算工作,只是数据传输而已,多线程反而造成磁头来回移动,效率不高。如果是两块以上的硬盘,可以用不同的线程访问不同的硬盘,效率比单线程要高

而且多线程操作同一文件除了效率还会有多线程问题,多个线程同时往数组里存数据还会有线程安全问题,如果不同步处理读取的文件就是错误的。

如果读取的话只能设置每个线程各自读取偏 移量

读取文件大小(比如大小是200K)。 2,启动5个线程,第一个线程读到40,第二个线程跳过40在读到80,总之得合理安排好各个线程读取的大小。这样才能不重复读取。大数据处理框架mapreduce原理和此类似

java 多线程读取txt 文件

多线程将读取的数据全部读取到一个Buffer里面去,然后再通过Buffer去处理,也就是生产者消费者模型,你将txt读取到一个ByteBuffer或者是大字节数组队列里面都可以,然后通过其它处理线程进行按行分隔

“java”中多线程按行读取txt且每个线程读的内容不能重复,这么求“demo”?

你把原来程序中直接读的地方,改成调用上面的函数,由该函数统一读行。这样,不管是你有 N 个线程,还是一个线程,都不会发生读的行重复,或者读的行不完整的现象了。

为了充分利用多线程读取,就需要把文件划分成多个区域,供每个线程读取。那么就需要有一个算法来计算出每个线程读取的开始位置和结束位置。那么首先根据配置的线程数和文件的总长度计,算出每个线程平均分配的读取长度。

但是有一点,由于文件是纯文本文件,必须按行来处理,如果分割点在某一行中间,那么这一行数据就会被分成两部分,分别由两个线程同时处理,这种情况是不能出现的。所以各个区域的结束点上的字符必须是换行符。第一个区域的开始位置是0,结束位置首先设为(文件长度/线程数),如果结束点位置不是换行符,就只能加1,直到是换行符位置。

如果多线程操作,那么需要保证多个线程操作同一个对象,此外请保证先有线程放进内容,其他线程才能拿出数据。

附上具体参考代码:

public class Test{

public static void main(String args[])throws Exception{

File file = new File("D:\\Test.java");//Text文件

BufferedReader br = new BufferedReader(new FileReader(file));//构造一个BufferedReader类来读取文件

String s = null;

while((s = br.readLine())!=null){//使用readLine方法,一次读一行

System.out.println(s);

}

br.close();;

}

}

北大青鸟java培训:Java多线程问题总结?

Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习,内容越多、越杂的知识,越需要进行深刻的总结,这样才能记忆深刻,将知识变成自己的。

java课程培训机构认为这篇文章主要是对多线程的问题进行总结的,因此罗列了多个多线程的问题。

这些多线程的问题,有些来源于各大网站、有些来源于自己的思考。

(1)发挥多核CPU的优势随着工业的进步,现在的笔记本、台式机乃至商用的应用服务器至少也都是双核的,4核、8核甚至16核的也都不少见,如果是单线程的程序,那么在双核CPU上就浪费了50%,在4核CPU上就浪费了75%。

单核CPU上所谓的”多线程”那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程”同时”运行罢了。

多核CPU上的多线程才是真正的多线程,它能让你的多段逻辑同时工作,多线程,可以真正发挥出多核CPU的优势来,达到充分利用CPU的目的。

(2)防止阻塞从程序运行效率的角度来看,单核CPU不但不会发挥出多线程的优势,反而会因为在单核CPU上运行多线程导致线程上下文的切换,而降低程序整体的效率。

但是单核CPU我们还是要应用多线程,就是为了防止阻塞。

试想,如果单核CPU使用单线程,那么只要这个线程阻塞了,比方说远程读取某个数据吧,对端迟迟未返回又没有设置超时时间,那么你的整个程序在数据返回回来之前就停止运行了。

多线程可以防止这个问题,多条线程同时运行,哪怕一条线程的代码执行读取数据阻塞,也不会影响其它任务的执行。

(3)便于建模这是另外一个没有这么明显的优点了。

假设有一个大的任务A,单线程编程,那么就要考虑很多,建立整个程序模型比较麻烦。

但是如果把这个大的任务A分解成几个小任务,任务B、任务C、任务D,分别建立程序模型,并通过多线程分别运行这几个任务,那就简单很多了。

java多线程读写文件

public static void main(String[] args) {

File data = new File("data.txt");

try {

InputStreamReader read = new InputStreamReader(new FileInputStream(

data), "UTF-8");

final BufferedReader bufferedReader = new BufferedReader(read);

for (int i = 0; i 5; i++) {

new Thread(new Runnable() {

@Override

public void run() {

String lineTXT = null;

synchronized (bufferedReader) {

try {

while ((lineTXT = bufferedReader.readLine()) != null) {

System.out.println(Thread.currentThread()+":"+lineTXT);

bufferedReader.notify();

bufferedReader.wait();

}

} catch (IOException e) {

e.printStackTrace();

} catch (InterruptedException e) {

e.printStackTrace();

}finally{

bufferedReader.notifyAll();

}

}

}

}).start();

}

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

} catch (FileNotFoundException e) {

e.printStackTrace();

}

}

java 多线程怎么读取一个表了的多个配置?

没看懂,个人觉得你的一条记录就是一个配置信息,对应一个配置对象

数据库就是存储记录的地方, 每次从数据库取自然就会取到最新的所有记录,也就是所有的配置项。

你的配置是纵向增加的,1个配置、2个配置、...、n个配置,没什么问题,数据库增加一行就行

配置是横向增加的,那你的配置对象就要变化了

而且这个跟线程池也没什么关系吧,或者你只是想来实现一个定时任务不断刷新,springboot注入个@Schedule也行

关于java多线程读取和java多线程读取大文件并解析入库的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-01,除非注明,否则均为首码项目网原创文章,转载请注明出处。