Java 多线程之龟兔赛跑(文件夹——读取文件——时间)
版权声明:本文为博主原创文章,未经博主允许不得转载。
描述:
乌龟和兔子(各自是一个Java线程)在我们的电脑上赛跑,我们为它们指定一个跑道(本地文件系统上的一个目录,该目录包含子目录)。跑的规则是读“跑道”上的所有文件。兔子很聪明,只读文件的元信息(路径名、大小、最后修改时间),但每读完一个文件就要睡1秒钟;乌龟很笨,读文件的每一个字节(乌龟每次读取数据的大小不超过1024字节),但是它不停歇地读,直到读完所有文件。写程序模拟它们同时起跑的比赛过程,最后输出“兔子赢!”或“乌龟赢!”
import java.io.File; /**兔子线程 * 路径名 大小 最后修改时间 读完一个文件sleep。。 * @author gang * */ public class Rabbit implements Runnable{ File file; public Rabbit(){ file = null; } public Rabbit(File file){ this.file = file; } public void run(){ read(file); } public void read(File file){ if(file.isDirectory()){ for(File files:file.listFiles()) read(files); } else { file.getAbsolutePath(); file.lastModified(); file.length(); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
package Thread; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; /**乌龟线程 * 每次读取不超过1024字节 一直读完整个文件夹 * @author gang * */ public class Turtle implements Runnable{ File file; public Turtle(){ file = null; } public Turtle(File file){ this.file=file; } public void run() { // TODO Auto-generated method stub try { read(file); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void read(File file) throws IOException{ if(file.isDirectory()){ for(File files:file.listFiles()) read(files); } else{ FileInputStream fiStream = new FileInputStream(file); byte b[] = new byte[1024]; int i; while((i = fiStream.read(b)) != -1); } } }
package Thread; import java.io.File; import java.util.Scanner; /**龟兔线程测试 输入相应的文件夹 * * @author gang * */ public class MainThread { public static void main(String[] args){ String pathStr; Scanner in = new Scanner(System.in); pathStr = in.nextLine(); // input pathFile File path = new File(pathStr); // path Rabbit rabbit = new Rabbit(path); Turtle turtle = new Turtle(path); long t1Begin = System.currentTimeMillis(); //start Thread t1 = new Thread(rabbit); t1.start(); while(t1.isAlive()); long t1End = System.currentTimeMillis(); // t1 end long t2Begin = System.currentTimeMillis(); //start Thread t2 = new Thread(turtle); t2.start(); while(t2.isAlive()); long t2End = System.currentTimeMillis(); // t2 end // 测试结果 if((t1End-t1Begin) > (t2End-t2End)){ System.out.printf("time of Rabbit is %d ms.\n",(t1End-t1Begin)); System.out.printf("time of Turtle is %d ms.\n",(t2End-t2Begin)); System.out.println("Turtle win the game."); } else if((t1End-t1Begin) < (t2End-t2End)){ System.out.printf("time of Rabbit is %d ms.\n",(t1End-t1Begin)); System.out.printf("time of Turtle is %d ms.\n",(t2End-t2Begin)); System.out.println("Rabbit win the game."); } else{ System.out.printf("time of Rabbit is %d ms.\n",(t1End-t1Begin)); System.out.printf("time of Turtle is %d ms.\n",(t2End-t2Begin)); System.out.println("nobody win the game."); } } }
代码解释见上注释。
输入相应测试的文件夹,即可开始测试,若文件项目多,则运行时间较长,请耐心等待。
Java 多线程之龟兔赛跑(文件夹——读取文件——时间)的更多相关文章
- android从asset文件夹读取文件
1)将一个txt文本(msg.txt)复制到开发目录的asset文件夹下. 2)用getAssets().open()可以得到一个输入流.注意getAssets方法必须用在Activity下边.如果不 ...
- HDFS 读取、写入、遍历文件夹获取文件全路径、append
版权声明:本文为博主原创文章,未经博主同意不得转载.安金龙 的博客. https://blog.csdn.net/smile0198/article/details/37573081 1.从HDFS中 ...
- Java删除文件夹和文件
转载自:http://blog.163.com/wu_huiqiang@126/blog/static/3718162320091022103144516/ 以前在javaeye看到过关于Java操作 ...
- 【转】Java删除文件夹和文件
原文网址:http://kxjhlele.iteye.com/blog/323657 以前在javaeye看到过关于Java操作文件的一篇文章,写的很好,但找了半天也没找到,就把找到底几篇文章整理一下 ...
- Android Studio的使用(十)--读取assets、Raw文件夹下文件,以及menu、drawable文件夹
1.直接在/src/main目录下面新建assets目录 2.接下来即可读取文件 3.读取Raw文件夹下文件也类似.首先在res文件夹下新建raw目录,然后放入需要的文件即可读取. 4.menu和dr ...
- php中读取中文文件夹及文件报错
php读取时出现中文乱码 一般php输出中出现中文乱码我们可用 header ('content:text/html;charset="utf-8"'); php中读取中文文件夹及 ...
- java 查询路径中所有文件夹和文件的名称,支持文件名模糊查询
java 查询路径中所有文件夹和文件的名称,支持文件名模糊查询 有时候我们遇到需要查询服务器或者本机某个路径下有哪些文件?或者根据文件名称模糊搜索文件,那么就可以使用本方法:可以获取某个路径下所有文件 ...
- Java访问文件夹中文件的递归遍历代码Demo
上代码: import java.io.File; /* * 需求:对指定目录进行所有内容的列出(包含子目录中的内容) * 也可以理解为 深度遍历. */ public class FindAllFi ...
- Java——如何创建文件夹及文件,删除文件,文件夹
package com.zz; import java.io.File; import java.io.IOException; /** * Java创建文件夹 */ public class Cre ...
随机推荐
- jquery实现停留半秒后再选择
jquery实现tab停留半秒后,选中菜单.切换tab下的内容: var showHandler=null; function init(){ $("#tab_ul").find( ...
- css中居中的居中方法
1:给div设置一个宽度,然后添加margin:0 auto属性 div{ width:200px; margin:0 auto; } 2:居中一个浮动元素 确定容器的宽高 宽500 高 300 的层 ...
- Object-C 对象 (创建/销毁 对象)-- 笔记
创建/销毁 对象: Dog *dog = [Dog alloc]; // 通过alloc创建dog一个这样的对象, alloc相对于C语言中的new // *号既表示指针,也表示引用 初始化构造函数 ...
- Andrdoid中相应用程序的行为拦截实现方式之----从Java层进行拦截
致谢: 感谢 简行之旅的这篇blog:http://blog.csdn.net/l173864930/article/details/38455951,这篇文章是參考这篇blog的进行一步一步操作的, ...
- [转] linux下的僵尸进程处理SIGCHLD信号
什么是僵尸进程? 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区,关闭所有打开的文件等,但内核为每一个终止子进程保存了一定量的信息.这些 信息至少包括进程ID,进程的终止状态,以及 ...
- Virtualbox安装增强工具失败
在安装Virtualbox增强工具安装时出现unable to find the sources of your current Linux kernel,安装失败,导致主机与虚拟机之间不能共享文件夹 ...
- 在Github上面搭建Hexo博客(一):部署到Github
什么是Hexo Hexo是一个基于Node.js的静态博客程序,可以方便的生成静态网页托管在Github和Heroku上.并且有很多人为其制作了很多优秀的主题(theme),你可以根据自己的喜好进行设 ...
- hdu 1175
#include <iostream> #include <string> #include <stdio.h> using namespace std; int ...
- YII框架中php入口文件隐藏
Apache配置修改 主要修改下httpd文件中的两个地方 1.启用mod_rewrite.so模块,在Apache的配置文件中找到如下行,去掉前面的字符"#",保存 #LoadM ...
- PHP语言中使用JSON
原文地址:http://www.ruanyifeng.com/blog/2011/01/json_in_php.html 在PHP语言中使用JSON 目前,JSON已经成为最流行的数据交换格式之一,各 ...