RecursiveAction
package com.wucj.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.RecursiveAction;
/**
* \* Created with IntelliJ IDEA.
* \* @author: wucj
* \* @date: 2020/3/27 23:08
* \* @description:
* \
*/
public class FindFileTask extends RecursiveAction {
private static Logger log = LoggerFactory.getLogger(FindFileTask.class);
private File path;
public FindFileTask(File path) {
this.path = path;
}
/**
* The main computation performed by this task.
*/
@Override
protected void compute() {
List<FindFileTask> findFileTaskList = new ArrayList<>();
File[] files = path.listFiles();
for (File file : files) {
if(file.isDirectory()){
findFileTaskList.add(new FindFileTask(file));
}else{
if(file.getAbsolutePath().endsWith("java")){
log.info("path:{}",file.getAbsolutePath());
}
}
}
if(!findFileTaskList.isEmpty()){
for(FindFileTask findFileTask:invokeAll(findFileTaskList)){
findFileTask.join();
}
}
}
}
package com.wucj.photo;
import com.wucj.utils.FindFileTask;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File;
import java.util.concurrent.ForkJoinPool;
/**
* \* Created with IntelliJ IDEA.
* \* @author: wucj
* \* @date: 2020/3/27 23:21
* \* @description:
* \
*/
public class FindFileTaskTest {
private Logger log = LoggerFactory.getLogger(this.getClass());
private File path;
@Before
public void init(){
path = new File("/Users/wucj/mine/message-simple");
}
@Test
public void findFileTask(){
ForkJoinPool forkJoinPool = new ForkJoinPool();
FindFileTask findFileTask = new FindFileTask(path);
forkJoinPool.execute(findFileTask);
findFileTask.join();
log.info("执行完毕...");
}
}