JAVA 队列【学习】
来源:互联网 发布:originlab mac 破解 编辑:程序博客网 时间:2024/05/16 07:01
声明:仅作为学习,侵权必删
一、队列概述
二、队列应用场景
三、实例代码
该代码来自中[博客园](http://www.cnblogs.com/end/archive/2012/10/25/2738493.html)
public class QueneTest { public static void main(String[] args) { String diretory = "D:\\个人" ;//in.nextLine(); String keyword = "添加"; final int FILE_QUEUE_SIZE = 10; final int SEARCH_THREADS = 100; long startTime = System.currentTimeMillis(); BlockingQueue<File> queue = new ArrayBlockingQueue<File>(FILE_QUEUE_SIZE); FileEnumerationTask enumerationTask = new FileEnumerationTask(queue,new File(diretory)); new Thread(enumerationTask).start(); for ( int i =1; i<100 ;i++){ new Thread(new SearchTask(queue,keyword)).start(); } long endTime = System.currentTimeMillis(); System.out.printf("speed Time is %s",(endTime-startTime)); } static class FileEnumerationTask implements Runnable { public static final File EMPTRY = new File(""); private BlockingQueue<File> queue; private File staringDirectory; public FileEnumerationTask(BlockingQueue<File> queue,File staringDirectory){ this.queue = queue; this.staringDirectory = staringDirectory; } @Override public void run(){ try { enumerate(staringDirectory); queue.put(EMPTRY); }catch (InterruptedException ex){ ex.printStackTrace(); } } public void enumerate(File diretory) throws InterruptedException { File[] files = diretory.listFiles(); for (File file: files ) { if(file.isDirectory()){ enumerate(file); }else{ queue.put(file); } } } } static class SearchTask implements Runnable { private BlockingQueue<File> queue; private String keyword; public SearchTask(BlockingQueue<File> queue,String keyword){ this.queue = queue; this.keyword = keyword; } @Override public void run(){ try { boolean done = false; while (!done) { File file = queue.take(); if (file == FileEnumerationTask.EMPTRY) { queue.put(file); done = true; } else { search(file); } } }catch (Exception ex){ ex.printStackTrace(); } } public void search(File file) throws IOException { BufferedReader bufferedReader= new BufferedReader(new FileReader(file)); int lineNumber = 0 ; String lineData = null ; while( (lineData = bufferedReader.readLine())!= null){ lineNumber++; if(lineData.contains(keyword)){ System.out.printf("%s:%d:%s%n",file.getPath(),lineNumber,lineData); } } bufferedReader.close(); } }}
总结:定义定长的数组队列,遍历文件到队列中去,通过空文件作为最终遍历后的标示符,开启多个线程,从队列中获取文件,各个线程分别搜索各自拿到文件中是否存在要搜索的关键字。
0 0
- java学习PriorityQueue队列
- java队列学习
- Java队列学习(一)
- java 消息队列学习
- JAVA 队列【学习】
- java初步学习之队列
- 数据结构学习----顺序循环队列(Java实现)
- 数据结构学习----链式队列(Java实现)
- RabbitMQ学习之工作队列(java)
- 学习java数据结构基础知识之队列
- Java学习笔记(82)-----------阻塞队列
- 深入学习java并发编程:阻塞队列
- java学习之队列的实现
- Java学习之栈,队列,数组,链表
- java算法学习笔记--队列结构
- 数据结构学习之队列的Java实现
- Java activemq消息队列入门学习
- JAVA学习总结之Queue(队列)
- linux下安装nginx
- 母牛的故事
- 流媒体技术笔记(DarwinStreamingServer相关)
- 229. Majority Element II(unsolved)
- C++ 丰富多彩的库
- JAVA 队列【学习】
- (pat)L1-7. 古风排版
- Linux 用户和组管理详解
- C#注解
- 【英语】三月全英环境
- 【HDU1693】Eat the Trees-插头DP
- @ImportResource导入文件、@Value
- 数字签名与数字证书
- 连连看