package com.copyFile;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

//50090
//41896
//10303
//10131
public class CopyFile {

private static String filePath1 = "E:\\test\\yuanshi.txt";
private static String filePath2 = "E:\\test\\mubiao\\";
private static ArrayList<String> filelist = new ArrayList<String>();
private static ArrayList<String> contextList22 = new ArrayList<String>();
private static ArrayList<ArrayList<String>> mubiaoContext = new ArrayList<ArrayList<String>>();
/**
* @param args
* 作者: liu.yj
* 时间: Jun 1, 2016
*/
public static void main(String[] args) {
System.out.println("==========执行耗时startData:"+System.currentTimeMillis());
getFiles(filePath2);
readLineFile();
//findContext(0);
execute();
Long endTime = System.currentTimeMillis();
System.out.println("执行耗时:"+(1464834022605L-1464834011597L));
}

public static String readLineFile(){
File file = new File(filePath1);
String lineContext = "";
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
// 显示行号
lineContext = tempString;
contextList22.add(lineContext);
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
return "";
}
/**
* 在文件中查找
*
* 作者: liu.yj
* 时间: Jun 1, 2016
*/
public static void findContext(int index,int stape){
for(int i=index;i<index+stape;i++){
//for(int i=0;i<filelist.size();i++){
find2(filelist.get(i));
}
}
public static void find2(String filePath){
File file = new File(filePath);
Map<String,ArrayList<String>> _map = new HashMap<String,ArrayList<String>>();
ArrayList<String> contextList = new ArrayList<String>();
String lineContext = "";
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader(file));
String tempString = null;
// 一次读入一行,直到读入null为文件结束
while ((tempString = reader.readLine()) != null) {
// 显示行号
lineContext = tempString;
if(lineContext != null && !"".equals(lineContext)){
String args[] = lineContext.split(" ");
if(contextList22.contains(args[0])){
if(args.length >2){
System.out.println("KEY:\t"+args[0]+"\t值:\t"+args[2]);
}
}
}
}
reader.close();
} catch (IOException e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e1) {
}
}
}
//_map.put(filePath, contextList);
mubiaoContext.add(contextList);
}
static void getFiles(String filePath){
File root = new File(filePath);
File[] files = root.listFiles();
for(File file:files){
if(file.isDirectory()){
/*
* 递归调用
*/
getFiles(file.getAbsolutePath());

}else{
filelist.add(file.getAbsolutePath());
//System.out.println("显示"+filePath+"下所有子目录"+file.getAbsolutePath());
}
}
}

public static void execute(){
//创建二十个线程
ExecutorService pool = Executors.newFixedThreadPool(20);
for(int i=0;i<20;i++){
Thread t1 = new MyThread(i*51,51);
pool.execute(t1);
}
// 关闭线程池
pool.shutdown();
}

}
class MyThread extends Thread {
private int countIndex = 0;
private int stape = 0;
public MyThread(int myIndex,int mStape){
countIndex = myIndex;
stape = mStape;
}
@Override
public void run() {
Long startTime = System.currentTimeMillis();
CopyFile.findContext(countIndex,stape);
Long endTime = System.currentTimeMillis();
System.out.println("==========执行耗时:"+endTime);
}
}

java多线程处理的更多相关文章

  1. Java多线程处理List数据

    实例1: 解决问题:如何让n个线程顺序遍历含有n个元素的List集合 import java.util.ArrayList; import java.util.List; import org.apa ...

  2. java多线程处理任务

    最近用到使用多线程处理给用户发送站内消息的问题,想到使用java自带的线程池进行处理这个问题,具体如下: 定义一个线程: package com.qlwb.util; import org.apach ...

  3. Java 多线程处理[全]

    http://blog.csdn.net/ghsau/article/details/7421217 Java线程(一):线程安全与不安全 http://blog.csdn.net/ghsau/art ...

  4. Java多线程处理某个线程超时的问题

    ExecutorService exec = Executors.newFixedThreadPool(4); List<Future<Integer>> futures = ...

  5. java多线程处理导入数据拆分List集合 同步处理插入数据

    原文:https://www.2cto.com/kf/201612/581174.html import org.apache.log4j.Logger; import org.apache.poi. ...

  6. java 多线程处理一个list的集合

    原文:http://blog.csdn.net/jenny8080/article/details/52100312 import java.util.ArrayList; import java.u ...

  7. Java多线程处理任务(摘抄)

    很多时候,我们需要对一个庞大的队列或者二维数组进行处理.这些处理可能是循环的,比如给一个excel多个sheet的联系人列表发邮件.很幼稚的方法就是用一个或者两个FOR循环搞定,对于庞大的数据有得让你 ...

  8. java多线程处理问题

    今天碰到个以前的线上bug需要处理下:问题是这样的,我们的app里面有个点赞的功能,点赞完后显示点赞人列表以及点赞数量,但是数量现在总是不准确.之后查看代码,发现点赞时候只是简单的向数据库添加了一条点 ...

  9. Java以基础类库

    Java以基础类库JFC(Java Foundation Class)的形式为程序员提供编程接口API,类库中的类按照用途归属于不同的包中. (一)java.lang包 Java最常用的包都属于该包, ...

随机推荐

  1. 从DataTable获取Json数据

    public string GetJson(DataTable dt){ JavaScriptSerializer jss=new JavaScriptSerializer(); jss.MaxJso ...

  2. Arcgis Server 10.2默认服务端口号修改方法

    本人安装Arcgis Server 10.2之后发布了一个地图服务,该服务默认使用的端口号是6080,本人使用的是教育网,使用教育网均能正常使用该服务,但是使用电信或者移动网络均不能正常访问该网站. ...

  3. java 8 原版 api 下载地址,

    http://download.oracle.com/otn-pub/java/javafx/8.0.25-b17/javafx-8u25-apidocs.zip?AuthParam=14174994 ...

  4. SOA 面向服务的体系结构

    SOA:面向服务的体系结构(service-oriented architecture) 是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来. 接口是采 ...

  5. Keep-Alive 总结

    一.简介 Keep-Alive是http请求头信息中的一个配置参数,开启之后俗称保持HTTP长连接,HTTP 1.0和HTTP 1.1都支持,HTTP1.0中该属性默认是关闭的,可在头信息中配置开启( ...

  6. 【巩固】JS中的封闭空间

    封闭空间的主要思想在于: JS中给一个变量外面加小括号,是不改变任何结果的.比如 var show = function(){ //定义一个名字为show的函数 ); }; show(); //调用名 ...

  7. java对xml文件的读取

    <?xml version="1.0" encoding="UTF-8"?> <body> <names type="1 ...

  8. [Linux] IP绑定解释 BindIp

    一.缘由: 今天安装Mongodb,本来想限制只能内网或者某几台机器可以访问,看到配置文件有个net.bindIp选项, 就自以为是的认为,他可以像nginx那样限制访问来源IP,其实大错特错.这里配 ...

  9. weave 建立跨节点docker网络

    weave的工作原理上与利用openvswitch建立vxlan基本一样,都是通过用三层的协议封装二层的报文来进行扩展,weave使用的是udp.weave封装了docker,在操作上为我们隐藏了很多 ...

  10. 用Spring+Junit4.4进行测试(使用注解)

    http://nottiansyf.iteye.com/blog/345819 使用Junit4.4测试 在类上的配置Annotation @RunWith(SpringJUnit4ClassRunn ...