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

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

public class Test{\x0d\x0a public static void main(String args[])throws Exception{\x0d\x0a File file = new File("D:\\Test.java")//Text文件\x0d\x0aBufferedReader br = new BufferedReader(new FileReader(file))//构造一个BufferedReader类来读取文件\x0d\x0aString s = null\x0d\x0awhile((s = br.readLine())!=null){//使用readLine方法,一次读一行\x0d\x0aSystem.out.println(s)\x0d\x0a}\x0d\x0abr.close()\x0d\x0a }\x0d\x0a}

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 = 0i <5i++) {

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

}

}

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

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

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

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/11616252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存