14.8 Callable和Future
来源:互联网 发布:索尼公司 知乎 编辑:程序博客网 时间:2024/06/14 01:32
import java.io.*;import java.util.*;import java.util.concurrent.*;/** * @version 1.01 2012-01-26 * @author Cay Horstmann */public class FutureTest{ public static void main(String[] args) { try (Scanner in = new Scanner(System.in)) { System.out.print("Enter base directory (e.g. /usr/local/jdk5.0/src): "); String directory = in.nextLine(); System.out.print("Enter keyword (e.g. volatile): "); String keyword = in.nextLine(); MatchCounter counter = new MatchCounter(new File(directory), keyword); FutureTask<Integer> task = new FutureTask<>(counter); Thread t = new Thread(task); t.start(); try { System.out.println(task.get() + " matching files."); } catch (ExecutionException e) { e.printStackTrace(); } catch (InterruptedException e) { } } }}/** * This task counts the files in a directory and its subdirectories that contain a given keyword. */class MatchCounter implements Callable<Integer>{ private File directory; private String keyword; /** * Constructs a MatchCounter. * @param directory the directory in which to start the search * @param keyword the keyword to look for */ public MatchCounter(File directory, String keyword) { this.directory = directory; this.keyword = keyword; } public Integer call() { int count = 0; try { File[] files = directory.listFiles(); List<Future<Integer>> results = new ArrayList<>(); for (File file : files) if (file.isDirectory()) { MatchCounter counter = new MatchCounter(file, keyword); FutureTask<Integer> task = new FutureTask<>(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 (ExecutionException e) { e.printStackTrace(); } } catch (InterruptedException e) { } return count; } /** * Searches a file for a given keyword. * @param file the file to search * @return true if the keyword is contained in the file */ public boolean search(File file) { try { try (Scanner in = new Scanner(file, "UTF-8")) { boolean found = false; while (!found && in.hasNextLine()) { String line = in.nextLine(); if (line.contains(keyword)) found = true; } return found; } } catch (IOException e) { return false; } }}
0 0
- 14.8 Callable和Future
- java callable和Future
- 多线程Callable和Future
- 线程--Callable和Future
- Callable和Future
- Callable和Future
- Callable、Future和CompletionService
- Callable和Future
- Callable和Future
- Callable和Future简介
- Callable和Future浅析
- Callable和Future
- Future和Callable
- Future和Callable
- Callable和Future
- Callable、Future和FutureTask
- Callable、Future和CompletionService
- Callable和Future
- Python -- 基础
- 14.7 线程安全的集合
- C语言printf()函数:格式化输出函数
- Windows Embedded Compact 7开发环境的搭建
- DOS窗口部分命令
- 14.8 Callable和Future
- sql删除末尾六个零
- 基于通用可编程GPU的视频编解码器——架构、算法与实现
- PhpStorm 基本设置
- 0×80070522客户端没有所需的特权 解决办法
- 14.9 执行器
- 第15周OJ实践3 字符串逆序输出
- 修改sts的默认编码格式,将iso-8859-1 修改为utf-8
- 14.10 同步器