多线程 -- 移动文件(生产者,消费者模式应用)
来源:互联网 发布:麦萌猫软件下载 编辑:程序博客网 时间:2024/06/05 20:54
期待实现的效果:
- Thread producer 负责向 某文件夹 (GEXF_DIR)中写文件。(从ORIGIN_DIR 移动到 GEXF_DIR)
- Thread consumer 负责从GEXF_DIR中取出数据到GEXF_SAVED_DIR中。
整体示意图如下:
Thread producer中的流程:
Thread consumer 流程图如下:
代码如下:
package tree.test.testThread;import java.io.File;import tree.utils.FileUtils;public class TestFileMove {public final static String ORIGIN_DIR = "test/dirTest/";public final static String GEXF_DIR = "test/dirTest/gexf_files/";public final static String GEXF_SAVED_DIR = "test/dirTest/gexf_saved/";private static File gexfFiles;private static boolean isFinished = false;public static void main(String[] args) {File gexfDir = new File(GEXF_DIR);Consumer consumer = new Consumer();consumer.setGexfFiles(gexfDir);Producer producer = new Producer();producer.setGexfFiles(gexfDir);isFinished = false;new Thread(producer).start();new Thread(consumer).start();System.out.println("main ended `````");}static class Consumer implements Runnable {private File dir;public void run() {while (!isFinished) {synchronized (dir) {// TODOFile files[] = dir.listFiles();for (int i = 0; i < files.length; i++) {if (FileUtils.isRequiredExtention(files[i].getName(), ".gexf")) {FileUtils.moveFileToAnother(files[i], GEXF_SAVED_DIR);}}}try {Thread.sleep(500);Thread.yield();} catch (InterruptedException e) {e.printStackTrace();}}System.out.println("consumer ended `````");}public void setGexfFiles(File gexfDir) {dir = gexfDir;}}static class Producer implements Runnable {private File dir;public void run() {// TODOFile originDir = new File(ORIGIN_DIR);File files[] = originDir.listFiles();for (int i = 0; i < files.length; i++) {synchronized (dir) {if (FileUtils.isRequiredExtention(files[i].getName(), ".gexf")) {FileUtils.moveFileToAnother(files[i], GEXF_DIR);}}try {Thread.sleep(200);} catch (InterruptedException e) {e.printStackTrace();}}isFinished = true;System.out.println("producer ended `````");}public void setGexfFiles(File gexfDir) {dir = gexfDir;}}}
0 0
- 多线程 -- 移动文件(生产者,消费者模式应用)
- 多线程应用--生产者、消费者模式
- 多线程的并发执行应用(生产者消费者模式)
- 多线程生产者消费者模式
- 生产者消费者模式 多线程
- 多线程-生产者消费者模式
- 多线程并发应用(生产者/消费者)
- 多线程-生产者消费者模式(1)
- 多线程-生产者消费者模式(2)
- Java多线程生产者/消费者模式(一)
- Java多线程生产者/消费者模式(二)
- java多线程 ----生产者消费者模式
- Java多线程 --- 生产者消费者模式
- Java多线程 生产者消费者模式
- java多线程---生产者消费者模式
- 多线程之生产者消费者模式
- 多线程编程:生产者消费者模式
- java 多线程 生产者消费者模式
- swift之"ambiguous use of subscript"
- 【记录】LED
- break and coutinue在遇到switch的不同
- csdn待改进点之31------>无登录态时去点赞,点不了是合理的(基于游客不能点赞), 但为什么不给用户提示? 为什么不直接跳转到登录页?
- pixhawk Lacal_position_estimator数据流
- 多线程 -- 移动文件(生产者,消费者模式应用)
- [leetcode-363]Max Sum of Rectangle No Larger Than K(java)
- C#中关闭第一个Form窗口,打开另一个新窗口方法
- ubuntu 16.04 ProxyChains4 编译安装
- DataBinding的简单使用
- AVFoundation编程指南1-使用 Assets
- java 环境变量配置(多个jdk设置)
- 文件操作
- h5+css 垂直导航菜单