多執行緒 -- 移動檔案(生產者,消費者模式應用)
期待實現的效果:
- 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) {
// TODO
File 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() {
// TODO
File 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;
}
}
}
相關文章
- 生產者消費者模式--java多執行緒同步方法的應用模式Java執行緒
- Java多執行緒——生產者和消費者模式Java執行緒模式
- 多執行緒之生產者消費者執行緒
- 用Python多執行緒實現生產者消費者模式Python執行緒模式
- Java多執行緒——生產者消費者示例Java執行緒
- Java多執行緒14:生產者/消費者模型Java執行緒模型
- Java 多執行緒(Java.Thread)------ 執行緒協作(生產者消費者模式)Java執行緒thread模式
- java多執行緒:執行緒間通訊——生產者消費者模型Java執行緒模型
- Java 多執行緒學習(執行緒通訊——消費者和生產者)Java執行緒
- python執行緒通訊與生產者消費者模式Python執行緒模式
- Java 多執行緒基礎(十二)生產者與消費者Java執行緒
- Java多執行緒——消費者與生產者的關係Java執行緒
- Python-多執行緒及生產者與消費者Python執行緒
- python中多執行緒消費者生產者問題Python執行緒
- 多執行緒-生產者消費者問題程式碼1執行緒
- 多執行緒下的生產者和消費者-BlockingQueue執行緒BloC
- JAVA執行緒消費者與生產者模型Java執行緒模型
- Java多執行緒之併發協作生產者消費者設計模式Java執行緒設計模式
- 執行緒間的協作(2)——生產者與消費者模式執行緒模式
- python多執行緒+生產者和消費者模型+queue使用Python執行緒模型
- 多執行緒併發如何高效實現生產者/消費者?執行緒
- C#多執行緒學習(三) 生產者和消費者C#執行緒
- python 多執行緒實現生產者與消費者模型Python執行緒模型
- 多執行緒-生產者消費者之等待喚醒機制執行緒
- Java多執行緒-併發協作(生產者消費者模型)Java執行緒模型
- C# 多執行緒學習(3) :生產者和消費者C#執行緒
- 生產者消費者模式模式
- 使用Python佇列和多執行緒實現生產者消費者Python佇列執行緒
- 生產消費者模式模式
- 多執行緒-生產者消費者問題程式碼2並解決執行緒安全問題執行緒
- 關於Java多執行緒實現生產者和消費者的問題Java執行緒
- 九、生產者與消費者模式模式
- python 生產者消費者模式Python模式
- 多執行緒-生產者消費者之等待喚醒機制程式碼優化執行緒優化
- java多執行緒總結六:經典生產者消費者問題實現Java執行緒
- java多執行緒之消費生產模型Java執行緒模型
- java學習回顧---生產者與消費者問題以及多執行緒補充Java執行緒
- Java多執行緒程式設計(同步、死鎖、生產消費者問題)Java執行緒程式設計