求问Java多线程查找大文件中某个单词的示例代码

求Java多线程查找大文件中某个单词的示例代码,新手,不知道如何分割大文件也不知道如何用java多线程查找以提高效率

2个回答

文件读取瓶颈在文件从磁盘上装入这个环节,磁盘的读取速率比cpu低好几个数量级,即便是固态硬盘,也远远比cpu慢。因此用多线程不能提高查找文件中单词的速度。

把文件读入内存,然后在内存中查找。这样可以提高速度。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

JAVA多线程下载多文件问题

在本地TXT文本中有一些文件链接地址,如何用多线程去处理下载? 想要做的是:用for循环遍历出要下载的文件列表,用多线程去下载,一个线程下载一个文件。 现在的问题是:线程A已经开始发起请求下载文件A,线程B会重新遍历for循环,又继续请求下载文件A,两个都重复了。

如何使用C语言 对一个很大的文本文件 多线程查找某个特定单词出现的次数

如题,实在是新手,不知道如何分割一个大文件,也不知道如何使用多线程进行查找

Java多线程写入同一文件该怎么写

创建4个线程,线程A,线程B,线程C,线程D。同时向一个文件夹里写入,线程A写入“A”,线程B写入“B”…… 要求写入内容为 ABCDABCD…… 我是个初学者,有没有大神能教教我该怎么写。

java在扫描文件的同时怎么开启多线程删除啊

求问Java在扫描文件的时候,需要保留最新的10条, 但是怎么同时开启一个线程来删除其余的文件啊 ``` package foo; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.List; public class Demo { public static void main(String[] args) { try { String path = "C:/Users/Administrator/Desktop/video/QXHDA012"; File file = new File(path); File[] tempList = file.listFiles(); // 先对文件进行排序 Arrays.sort(tempList, new Demo.CompratorByLastModified()); List<String> list = new ArrayList<String>(); for (int i = 0; i < tempList.length; i++) { String fnameString = tempList[i] + ""; String fileName = fnameString.substring(fnameString .lastIndexOf("\\") + 1); // System.out.println("排序后"+fileName); //把最新的5个放入集合中 if (i <= 4) { list.add(fileName); } //留下最新的10个文件 其余全部删除 if (i > 9) { File file2 = new File(fnameString); file2.delete(); } } System.out.println(list); } catch (Exception e) { } } // 创建一个排序的方法 static class CompratorByLastModified implements Comparator<File> { public int compare(File f1, File f2) { long diff = f1.lastModified() - f2.lastModified(); if (diff > 0) { return -1; } else if (diff == 0) { return 0; } else { return 1; } } } } ``` 上面是这个demo 这样可以删除 但是我不知道怎么开启多线程来删除 求大神帮帮忙

java多线程池中指定某个线程终止

public void run() { try { System.out.println(Thread.currentThread().getName()+“启动”); Thread.sleep(100000); System.out.println(Thread.currentThread().getName()+“停止”); } catch (InterruptedException e) { System.out.println("线程被终止"); } } funcation(){ a.start } 假设线程a b c……按顺序启动,我现在想停下b,如何操作

关于java多线程并发读写的问题

1.文件内容读取到缓存 2.从缓存获取文件内容,写入到磁盘 3.控制缓存大小 4.多线程并发写丶读

多线程并发处理文件内容

假设一文件夹下有10000个文件,要分10个线程进行读取,分批处理Java怎么用多线程并发方法完成

Java多线程问题——同样的代码,得不到一样的结果?

初学自学java,学到多线程时,按照书中例子里的代码自己手动敲了一遍,怎么都得不到和书中一样的输出结果,请问为什么会这样? 附上自己敲的代码&运行结果和书中的代码及其运行结果 自己敲的代码如下: ``` public class ThreadDemo9_2 { public static void main(String args[]) { TestThread t=new TestThread(); new Thread(t).start(); for(int i=0;i<10;i++) System.out.println("main线程在运行。"); } } class TestThread implements Runnable { public void run() { for(int i=0;i<10;i++) System.out.println("TestThread在运行。"); } } ``` 自己敲的代码运行结果: ![](https://img-ask.csdn.net/upload/201703/08/1488980729_31857.png) 书中的代码 ![](https://img-ask.csdn.net/upload/201703/08/1488980786_728097.png) 书中的运行结果 ![](https://img-ask.csdn.net/upload/201703/08/1488980820_560073.png)

写了个java多线程下载器,但只有文件的部分内容下载成功。求大神!

import java.net.*; import java.io.*; class Test { //定义文件大小 private static int fileLength; //定义文件保存路径 private static String fileDirection; //定义线程数量 private static int threadNum; //定义线程组 private static Threads[] threads; //定义资源下载路径 private static String webDirection; /** * 默认构造器 * */ public Test(){} /** * 构造器: * 初始化threadNum(线程数量),fileDirection(文件保存路径),webDirection(资源下载路径) * */ public Test(int threadNum, String fileDirection, String webDirection) { this.threadNum = threadNum; this.fileDirection = fileDirection; this.webDirection = webDirection; //初始化threads数量。 threads = new Threads[threadNum]; } public static void downLoad() throws Exception { URL url = new URL(webDirection); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Accept", "*/*"); conn.setRequestProperty("Accept", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, " + "application/x-shockwave-flash, application/xaml+xml, " + "application/vnd.ms-xpsdocument, application/x-ms-xbap, " + "application/x-ms-application, application/vnd.ms-excel, " + "application/vnd.ms-powerpoint, application/msword, */*"); conn.setRequestProperty("Charset", "UTF-8"); //获取连接 conn.connect(); //输出连接响应代码 System.out.println(conn.getResponseCode()); //获得文件大小 fileLength = conn.getContentLength(); //关闭连接 conn.disconnect(); //设置每条线程下载部分的大小 int subLength = fileLength / threadNum + 1; //设置本地文件的大小 RandomAccessFile file = new RandomAccessFile(fileDirection, "rw"); file.setLength(fileLength); file.close(); //以循环的方式来开始每一条线程 for (int i = 0; i < threadNum; i++) { //计算每条线程的下载的开始位置 int startPoint = i * subLength; //每条线程使用一个RandomAccessFile进行下载 RandomAccessFile subFile = new RandomAccessFile(fileDirection, "rw"); //定位该线程的下载位置 subFile.seek(startPoint); //初始化该线程 threads[i] = new Threads(subLength, startPoint, subFile, webDirection); //启动线程 threads[i].start(); } } } class Threads extends Thread { //定义该线程的下载位置 private static int startPoint; //当前线程需要下载的文件块 private static RandomAccessFile subFile; //定义资源的下载路径 private static String webDirection; //定义当前线程需要下载的问文件大小 private static int subLength; //定义已下载文件字节数 private static int length; /** * 构造器: * 初始化sublength,startPoint,subFile,webDirection * */ public Threads(int sublength, int startPoint, RandomAccessFile subFile, String webDirection) { this.startPoint = startPoint; this.subLength = sublength; this.subFile = subFile; this.webDirection = webDirection; } @Override public void run() { try { URL url = new URL(webDirection); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(1000); conn.setRequestProperty("Accept", "image/gif, image/jpeg, image/pjpeg, image/pjpeg, " + "application/x-shockwave-flash, application/xaml+xml, " + "application/vnd.ms-xpsdocument, application/x-ms-xbap, " + "application/x-ms-application, application/vnd.ms-excel, " + "application/vnd.ms-powerpoint, application/msword, */*"); conn.setRequestProperty("Accept-Language", "zh-CN"); conn.setRequestProperty("Charset", "UTF-8"); conn.connect(); //获取一个输出流, InputStream input = conn.getInputStream(); //是输出流跳过startpoint字节,表明该线程只下载自己负责的那一部分文件块 input.skip(startPoint); byte[] buffer = new byte[1024]; int hasNext = 0; //读取网络数据,并写入本地文件 while (length < subLength && (hasNext = input.read(buffer)) != -1) { subFile.write(buffer, 0, hasNext); //累计该线程的下载的总大小 length += hasNext; } input.close(); subFile.close(); } catch (Exception e) { } } } public class ThreadsDownload { public static void main(String[] args)throws Exception { // TODO Auto-generated method stub Test test = new Test(2, "C:\\Users\\Administrator\\Desktop\\music.txt", "http://shcm09.baidupcs.com/file/59980bec5eb499787dc6888f8c769620?bkt=p3-140059980bec5eb499787dc6888f8c769620847e32380000000003bc&fid=2283488641-250528-388951467231009&time=1484371050&sign=FDTAXGERLBH-DCb740ccc5511e5e8fedcff06b081203-%2FRxhx4PSo2A2tg6emD0bGTEM5DQ%3D&to=sh09vb&fm=Nan,B,M,mn&sta_dx=956&sta_cs=5&sta_ft=txt&sta_ct=0&sta_mt=0&fm2=Nanjing02,B,M,mn&newver=1&newfm=1&secfm=1&flow_ver=3&pkey=140059980bec5eb499787dc6888f8c769620847e32380000000003bc&sl=69926991&expires=8h&rt=pr&r=745301334&mlogid=314351329813847523&vuk=2283488641&vbdid=2298463801&fin=test.txt&fn=test.txt&slt=pm&uta=0&rtype=1&iv=0&isw=0&dp-logid=314351329813847523&dp-callid=0.1.1&csl=500&csign=Cfc%2B%2Bn4hgLFC3dLFpSY0MMKwS%2BE%3D"); test.downLoad(); }

java多线程分块上传 支持断点续传

大家好,我是刚毕业的小白。今天在做上传的时候,看到公司代码有写了分块续传+断点续传方法,但是没有实现;百度了一下,还是 没有弄明白,所以请会的朋友指点一下!!!小弟在此感激不尽

为什么使用Java多线程下载文件时下载后的文件和服务器端文件大小一模一样但是无法打开

为什么使用Java多线程下载文件时下载后的文件和服务器端文件大小一模一样但是无法打开?? ``` package com.miuitust.mutilethread; import java.io.File; import java.io.InputStream; import java.io.RandomAccessFile; import java.net.HttpURLConnection; import java.net.URL; public class MutileThreadDownload { private static int THREADCOUNT = 3; private static long blocksize; public static void main(String[] args) throws Exception { // 服务器文件路径 String path = "http://localhost/demo.exe"; URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); int code = conn.getResponseCode(); if (code == 200) { long size = conn.getContentLength(); System.out.println("服务器文件的大小:" + size); blocksize = size / THREADCOUNT; //在本地创建一个空白的文件 File file = new File("target.exe"); RandomAccessFile raf = new RandomAccessFile(file, "rw"); raf.setLength(size); //20,796,344 20,796,344 //开启线程 for (int i = 1; i <= THREADCOUNT; i++) { long startIndex = (i - 1) * blocksize; long endIndex = i * blocksize - 1; if (i == THREADCOUNT) { endIndex = size-1; } System.out.println("开启线程:" + i + "下载的位置:" + startIndex + "~" + endIndex); new DownloadThread(i, startIndex, endIndex, path).start(); } } conn.disconnect(); } private static class DownloadThread extends Thread { private int threadId; private long startIndex; private long endIndex; private String path; public DownloadThread(int threadId, long startIndex, long endIndex, String path) { super(); this.path = path; this.threadId = threadId; this.startIndex = startIndex; this.endIndex = endIndex; } @Override public void run() { try { URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url .openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("Range", "bytes=" + startIndex + "-" + endIndex); conn.setConnectTimeout(5000); int code = conn.getResponseCode(); System.out.println("服务器状态码:" + code); InputStream is = conn.getInputStream(); File file = new File("target.exe"); RandomAccessFile raf = new RandomAccessFile(file, "rw"); //指定文件开始写的位置 raf.seek(startIndex); System.out.println("第" + threadId + "个线程写文件的开始位置:" + startIndex); int len = 0; byte[] buffer = new byte[1024]; while ((len = is.read(buffer)) != -1 && startIndex < endIndex) { raf.write(buffer, 0, len); } is.close(); raf.close(); System.out.println("线程" + threadId + "下载完毕了"); } catch (Exception e) { e.printStackTrace(); } } } } ``` 有没有大神晓得是怎么回事呢?

java多线程 共享变量的问题

Main.java ``` public class Main { public static void main(String[] args) { Service ser=new Service(); ThreadA a=new ThreadA(ser); a.start(); ser.stopMethod(); } } ``` ThreadA.java ``` public class ThreadA extends Thread { private Service service; public ThreadA(Service service) { this.service=service; } @Override public void run() { service.runMethod(); } } ``` Service.java ``` public class Service { private boolean isContinueRun=true; public void runMethod() { while(isContinueRun) { } System.out.println("停下来了"); } public void stopMethod() { isContinueRun=false; } } ``` 按照书上说的 不是共享变量在多线程中是单独的副本吗 ser已经传入到ThreadA中 我在主线程中改变了状态值会影响到线程中的副本吗? 这段代码执行后 确实把循环停住了 求大神们帮忙看看

java多线程读取集合对象后写入同一文件

有一个学生对象,包含学号、姓名、班级属性 生成10个学生对象后放入集合中 运用多线程读取集合中学生对象后将学生信息写入到同一文件(按学生学号排序) 本人多线程实在不会,求大神解答。(不实现排序的也行)主要是能有多线程方面的代码提供下参考

socket编程多线程文件传输

要实现的是开多线程传输一个文件,目的是提高传输速度。 思路是这样的:服务端开多线程,将文件分割,一个线程传输一块,客户端也开多线程,每个线程接受一块,最后拼成一个完整的文件。服务端支持多线程, 客户端要支持多线程, 然后客户端每个线程都建立连接到服务端请求一个文件的某个分片。 希望大家可以提供一下类似的代码,现在只有思路不知道怎么下手。

java 线程共用代码段吗?

java的线程里run方法里的代码段,new几个Thread类一块运行时,内存中只有一套代码吧?

求java多线程教程或图书

如题,求java多线程开发教程,或图书。 目前可见需解决问题,多线程运算,返回结果。

java多线程中的异常问题?

今天看java编程思想中并发部分的时候,看到了那么一句话“异常不能跨线程传播回main(),所以你必须在本地所有的任务内部产生的异常”,也就是说run()方法不可以throws Exception。但是测试的时候发现,Callable接口中的call方法是可以throws的。想请教一下大牛们,Runnable和Callable接口除了有无返回值的区别外,底层实现有什么本质区别啊,能简明说一下吗?

关于JAVA 多线程 与 反射的问题

**思路就是有一个继承Thread的线程类ProxyThread,这个类接受一个Method对象 ,然后run方法中循环调用它。** **测试代码是创建了一个ProxyThread的xianc对象 然后穿了一个fun方法,线程start以后fun之执行一次就结束了**。 ## Threa实现类 ``` package a; import java.lang.reflect.Method; public class ProxyThread extends Thread{ private boolean flag; private Method method; private Object target; private Object[]args; public ProxyThread(boolean flag, Method m, Object target,Object[]args) { super(); this.flag = flag; this.method = m; this.target = target; } public void setFlag(boolean flag) { this.flag = flag; } @Override public void run() { while(flag) { try { method.invoke(target, args); Thread.sleep(100); } catch (Exception e) { e.printStackTrace(); } } } } ``` ## 调用代码 ``` package a; import org.junit.Test; public class Demo { @Test public void test() throws NoSuchMethodException, SecurityException { ProxyThread thread = new ProxyThread(true,this.getClass().getMethod("fun"),this,null); thread.start(); } public void fun() { System.out.println("=========>"); } } ``` 思路是传一个Method进去执行 可是fun为什么只执行一次?

java 多线程 出现数据重复调用问题

java 多线程 出现数据重复调用问题 用id来判断下是否重复可以啊? 求大神给个实列

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c#跨线程停止timer c#批量写入sql数据库 c# 自动安装浏览器 c#语言基础考试题 c# 偏移量打印是什么 c# 绘制曲线图 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行
立即提问