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. centos安装sublime

    在官网下载,tarball    下载链接        http://www.sublimetext.com/3 提示信息:  Ubuntu 64 bit - also available as a ...

  2. LeetCode-Subsets

    Given a set of distinct integers, nums, return all possible subsets. Note: The solution set must not ...

  3. English—句子

    1. So far so good.   目前为止,一切都好. 2. Be my guest.     请便.别客气. 3. You're the boss.    听你的. 4.I've heard ...

  4. js动态更改对象属性值的方法

    下面代码,替换属性名称包含date的属性中的T为空格. for (var o in data) {                        //console.info(eval("d ...

  5. Discuz模拟批量上传附件发帖

    简介 对于很多用discuz做资源下载站来说,一个个上传附件,发帖是很繁琐的过程.如果需要批量上传附件发帖,就需要去模拟discuz 上传附件的流程. 模拟上传 discuz 附件逻辑 dz附件储存在 ...

  6. C#:调用webservice时提示对操作的回复消息正文进行反序列化时出错

    主要原因webservice返回值的长度超过readerQuotas中的了maxStringContentLength值,造成返回值截断,不完整,反序列化时出错. <readerQuotas m ...

  7. python基础知识点整理

    序列 描述 sequence(序列)是一组有顺序的元素的集合.序列可以包含一个或多个元素,也可以没有任何元素.我们之前所说的基本数据类型,都可以作为序列的元素. 序列有两种:tuple(定值表: 也有 ...

  8. Lab_6_SysOps_AutoScaling_Linux_v2.5

    System Operations - Lab 6: Using Amazon Elastic Load Balancer (Linux) - 2.5 ======================== ...

  9. Visual Studio并发Qpar优化效果

    IOCP客户端的connect线程FOR循环中添加强制并行,1万/S并发connect+send+recv+close,任务管理器使用从60%降到20%. Visual Studio性能监控CPU使用 ...

  10. Sublime Text 2/3安装使用及常用插件

    一.介绍 Sublime Text 是一款较新的编辑器,它轻量.简洁.高效,良好的扩展性以及跨平台等特性,使得越来越多的开发人员喜爱.它是一款收费的商业软件,但可以免费无限制无限期的试用,只会偶尔提醒 ...