`

Future使用小例

 
阅读更多
package com.test.current;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.concurrent.Callable;
import java.util.concurrent.Future;
import java.util.concurrent.FutureTask;

public class FutureTest {
	public static void main(String[] args) {
		//指定目录和关键字
		String directory = "C:\\Program Files\\Java\\jdk1.6.0_29";
		String keyword = "volatile";
		MatchCounter counter = new MatchCounter(new File(directory),keyword);
		FutureTask<Integer> task = new FutureTask<Integer>(counter);
		Thread t = new Thread(task);
		t.start();
		try{
			System.out.println(task.get() + "matching files");
		}catch (Exception e) {
			e.printStackTrace();
		}
	}
}
//这个线程用户向队列中添加文件
class MatchCounter implements Callable<Integer>{
	private File directory;
	private String keyword;
	private int count;
	public static File DUMMY = new File("");//这个文件作为一个结束标记
	
	public MatchCounter(File directory,String keyword){
		this.directory = directory;
		this.keyword = keyword;
	}
	
	public Integer call(){
		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);
					FutureTask<Integer> task = new FutureTask<Integer>(counter);
					results.add(task);
					Thread t = new Thread(task);
					t.start();
				}else{
					if(search(file)){
						count++;
					}
				}
			}
			for(Future<Integer> result:results){
				try{
					count += result.get();
				}catch (Exception e) {
					e.printStackTrace();
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		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 (IOException e) {
			return false;
		}
	}
}
 

 

分享到:
评论

相关推荐

    Netty Future-Listener 机制.pdf

    下面是一个典型的使用`Future-Listener`机制的示例代码片段,展示如何处理写操作的完成情况: ```java @Override public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { ctx....

    Language Models:Past, Present, and Future.pdf

    以BERT(双向编码器表示)和GPT(生成预训练变换器)为例,它们都是在特定的预训练任务上表现出色的模型。BERT在语言理解任务中达到了前所未有的准确度,甚至在某些方面超过了人类的表现。而GPT-3不仅在语言理解任务...

    java经典程序300例源代码16-19章

    这部分可能介绍了Thread类和Runnable接口的使用,线程的同步和通信机制(如synchronized关键字、wait()、notify()方法),以及高级线程管理如ExecutorService和Future。 19章可能涉及到网络编程。Java提供了丰富的...

    java案例精粹150例

    7. **多线程**:包括Thread类的使用,实现Runnable接口,线程同步(synchronized关键字、wait()、notify()、notifyAll()),线程池(ExecutorService、ThreadPoolExecutor、Future)等。 8. **文件与目录操作**:如...

    JAVA 2应用编程150例

    《JAVA 2应用编程150例》是一本面向初学者的编程教程,旨在通过丰富的实例帮助新手快速掌握Java编程语言。这本书包含了15个章节的内容,覆盖了Java 2平台的基础到进阶知识,每个章节都围绕一个或多个主题进行深入浅...

    Ridesharing_ The state-of-the-art and future directions.pdf

    以公交车或地铁为例,这些系统为乘客提供了较低的成本和较为可靠的运输服务,但往往缺乏一定的灵活性和个性化服务。 #### 共享出行概述 共享出行是一种由多个乘客共同使用同一辆车以完成特定行程的交通模式。这种...

    项目活动中促进幼儿深度学习的支持策略——以中班《你好,树洞先生》为例.pdf

    例如,在《你好,树洞先生》项目活动中,教师可以通过让幼儿观察树洞,引发他们对树洞的兴趣,然后再次带领他们到小树林,通过工具的探究,拓展他们的观察和关注细节的能力。这种探究活动能够激发幼儿的好奇心,提高...

    C++应用编程200例

    5. 标准库中的并发支持:探索std::thread、std::mutex、std::future等并发编程工具。 通过《C++应用编程200例》,读者不仅可以全面了解C++语言的各个方面,还能通过实践提升解决问题的能力,为进阶学习和开发工作...

    java实用编程100例

    7. **多线程**: 了解线程的创建(Thread类和Runnable接口)、线程同步(synchronized关键字、wait()、notify()、notifyAll()方法)、线程池(ExecutorService、ThreadPoolExecutor、Future接口)等概念。 8. **网络...

    JAVA程序设计技巧1001例

    读者可以学习到线程的创建和管理,synchronized关键字的使用,以及高级并发工具如ExecutorService和Future的概念。 总之,《JAVA程序设计技巧1001例》全面覆盖了Java编程的各个方面,从基础到进阶,每个实例都是...

    java实例100例

    14. **并发编程**:Java提供了丰富的并发工具类,如ExecutorService、Future和Callable。实例将展示如何有效管理并发任务。 通过"Java实例100例",你将能够逐步提升Java编程技能,无论是基础概念的理解还是进阶技术...

    java程序设计150例

    16. **多线程工具类**: ExecutorService、ThreadPoolExecutor、Future、Callable等,理解和使用线程池。 17. **注解(Annotation)**: 定义和使用注解,了解元数据的作用。 18. **Apache Commons等第三方库**:...

    [J2SE]应用编程150例

    5. **多线程**:Java提供了丰富的多线程支持,例子会解释如何创建和管理线程,实现线程同步和互斥,以及使用ExecutorService和Future接口。 6. **网络编程**:Java提供了Socket和ServerSocket类进行网络通信,例子...

    Java高级编程百例

    11. 并发工具类:如CountDownLatch、Semaphore、CyclicBarrier、Future等,它们简化了多线程间的协调和同步。 12. Swing/AWT/SwingWorker:这些是Java的图形用户界面库,SwingWorker尤其适用于在UI线程外执行耗时...

    c++应用编程200例

    9. **多线程编程**:C++11引入了多线程支持,实例可以涵盖线程的创建、同步(如互斥量mutex、条件变量cond_var、future和promise等)和线程安全的数据结构。 10. **C++标准库**:C++标准库提供了大量功能强大的工具...

    java程序100例

    7. **多线程**:Java支持多线程编程,例子可能会演示Thread类的使用,线程同步(synchronized关键字、wait()、notify()方法)和并发API(ExecutorService、Callable、Future)的应用。 8. **接口与抽象类**:接口...

    JAVA 2编程150例

    6. **多线程**:Thread类的使用,同步机制(synchronized关键字,wait()、notify()方法),以及ExecutorService和Future接口的应用。 7. **文件与目录操作**:File类和FileInputStream/FileOutputStream的使用,...

    JAVA实例编程100例3

    JAVA的并发库非常丰富,包括`java.lang.Thread`,`java.util.concurrent`包等,这个实例可能是关于线程同步,如使用`synchronized`关键字,wait/notify机制,或者更高级的并发工具如`ExecutorService`和`Future`。...

    boost 线程库的应用例子, 罗大侠的书本配例,基于1.52

    本文将通过罗剑锋先生的书本配例,基于Boost 1.52.0版本,详细探讨如何在Visual Studio 2010环境下使用Boost线程库,并提供实际应用示例。 首先,Boost线程库的核心概念是线程(Thread)。线程是程序执行的最小单位...

    Java实效编程百例

    《Java实效编程百例》是一本专注于Java编程实践的书籍,旨在通过丰富的实例来提升开发者在实际编程中的技能和效率。书中的每一个实例都精心设计,涵盖了Java开发过程中的核心概念和技术,帮助读者掌握Java编程的精髓...

Global site tag (gtag.js) - Google Analytics