package com.test.current;
import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.concurrent.Callable;
import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.ThreadPoolExecutor;
public class ThreadPoolTest {
public static void main(String[] args) {
//指定目录和关键字
String directory = "C:\\Program Files\\Java\\jdk1.6.0_29";
String keyword = "volatile";
ExecutorService pool = Executors.newCachedThreadPool();
MatchCounter counter = new MatchCounter(new File(directory), keyword, pool);
Future<Integer> result = pool.submit(counter);
try{
System.out.println(result.get()+" matching files");
}catch (Exception e) {
e.printStackTrace();
}
pool.shutdown();
int largestPoolSize = ((ThreadPoolExecutor)pool).getLargestPoolSize();
System.out.println("largest pool size="+largestPoolSize);
}
}
class MatchCounter implements Callable<Integer>{
private File directory;
private String keyword;
private ExecutorService pool;
private int count;
public MatchCounter(File directory, String keyword, ExecutorService pool) {
this.directory = directory;
this.keyword = keyword;
this.pool = pool;
}
public Integer call() throws Exception {
count =0;
try{
File[] files = directory.listFiles();
ArrayList<Future<Integer>> results = new ArrayList<Future<Integer>>();
for (File file : files) {
if(file.isDirectory()){
MatchCounter counter = new MatchCounter(file, keyword, pool);
Future<Integer> result = pool.submit(counter);
results.add(result);
}else{
if(search(file)){
count ++;
}
}
for (Future<Integer> result : results) {
try{
count += result.get();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}catch (Exception e) {
}
return count;
}
public boolean search(File file){
try{
Scanner in = new Scanner(new FileInputStream(file));
boolean found = false;
while(!found && in.hasNextLine()){
String line = in.nextLine();
if(line.contains(keyword)){
found = true;
}
}
in.close();
return found;
}catch(Exception e){
e.printStackTrace();
return false;
}
}
分享到:
相关推荐
vc++线程池的经典实例,不可多得,觉得经典
如果添加成功,则添加其余的线程(本例中为 4 个)。然后线程池将工作项放入可用线程中。调用 eventX 上的 WaitOne 方法,这会使程序的其余部分等待,直到用 eventX.Set 方法触发事件为止。最后,程序打印出线程上的...
因为本人是个小白,多线程经常用,但是线程池并没有用过,(一听到线程池,总感觉高大上)。但是近期写彩票软件的时候发现,多线程长期操作会导致内容不断的升高直至报错,遂想起了线程池,完善后发现不是一般的叼...
往往会遇到一个请求需要处理很多次数据库,想要分成多个线程异步处理,在此给出个一个试例完成上述需求,子事务的成败会控制主线程的事务,并利用了CompletableFuture实现异步监听,@Async注解实现了线程池的应用。
Java 业务开发常见错误 100 例 代码篇 03丨线程池:业务代码最常用也最容易犯错的组件
构如下所示:在⼤多数的应⽤场景中,读操作的⽐例远远⼤于写操作。那么,当执⾏读操作的时候,对数据是没 有修改的,所以,⽆须对数据进⾏加锁操作。⽽针对于写操作的场景中,则需要加锁来保证数据的 正确性。 ● ⽽...
piscina-node.js工作池 :check_mark: 线程之间的快速通信 :check_mark: 涵盖固定任务和可变任务方案 :check_mark: 支持灵活的池大小 ...例 在main.js : const Piscina = require ( 'piscina' ) ; const piscina =
主要给大家介绍了关于Spring Boot如何优雅的使用多线程的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
方法一:进程池/线程池 如下例demo所示, 创建了一个大小是4的进程池,然后创建5个进程,并启动 from multiprocessing import Pool import os, time, random def long_time_task(name): print('Run task %s (%s)....
最近在工作中用到了libcurl请求大量网页,感觉使用多线程的方式线程数太高的话会影响性能...今天抽空写了两个小demo,也一并发出来了。这个异步框架和平常使用的同步请求思路上有些不同,具体有哪些不同,可以看源码。
服务器 Thrift提供的常见服务端类型有一下几种: thrift.server.TServer....我们以线程池服务器为例,其他方式相同。 import sys sys.path.append('gen-py') # 增加生成代码的查找包路径 from calculate im
吉林大学软件学院卓班设计模式第一次作业 一. 使用分类稳定和变化的方法,重新设计类,使得新设计能以扩展代码的方式适应变化 未来可能会增加新的数据成员如mVal3, do1和do2...请用多例模式设计线程池类(ThreadPool)
实例143 使用线程池优化多线程编程 186 实例144 Object类中线程相关的方法 187 实例145 哲学家就餐问题 189 实例146 使用信号量实现线程同步 190 实例147 使用原子变量实现线程同步 191 实例148 使用事件分配线程...
线程池ThreadPoolExecutor 阻塞队列BlockingQueue,生产者消费者模式 选择器 渠道 字节缓冲区 ProtoStuff 高性能序列化 HttpClient连接池 Spring依赖注入 lombok简化POJO开发 原子指标 内置锁 竣工服务 log4j+slf4j...
提供线程池执行微信方法,方法调用线程池大小可配置 长任务消息推送 通过微信上下文配置支持多个微信公众号处理 提供统一的异常处理机制 提供access_token自动更新机制 请求消息组装 灵活的响应消息类型 二、快速...
书自上而下地介绍了.NET执行C#代码的方法。首先描述了Windows线程的定义,它们与.NET进程、...本书还介绍了多线程应用程序使用的一些典型的体系结构,尤其是线程池,并阐述了如何调试多线程代码。最后用一个完整的例