Java实现线程池遍历查找文件

Java Thread pool 线程池简单实现线程池遍历查找文件

个人理解:

线程池就好比是顺丰,老板接到了订单。一个线程就是一个快递员。快递到物流点后,相当于给快递小哥分配了任务。小哥迅速拿走,进行投递。

平常情况快递小哥派完一车,又回来拿件继续派送,足够人手就是定义的corepoolsize的线程数。
特殊情况,到双十一,快递量激增,人手不够就得增加maximumpoolsize。当然过了双十一,就不需要这么多人手,就要适当裁员。

如果对于线程池或文件的知识有所遗忘可以在这个网站学习:
老师超级搞(笑)
https://how2j.cn/

话不多说,上代码:

//给线程任务,快递到物流点:
import java.util.concurrent.LinkedBlockingDeque;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

public class Findfile extends Thread {
    public static void main(String[] args)throws InterruptedException {
        ThreadPoolExecutor pool=new ThreadPoolExecutor(20,30,20, TimeUnit.SECONDS,new LinkedBlockingDeque<Runnable>());
        //20:创建了20个线程   30:20个线程不够用时会自动增加到30个  20,TimeUnit.SECONDS:线程停用20s后被回收
        Mytask mytask0=new Mytask("D:\\QQ\\178");  //分别在这两个目录下寻找
        Mytask mytask1=new Mytask("D:\\QQ\\951");
        pool.execute(mytask1);    //设定了两个任务 mytask0 mytask1
        pool.execute(mytask0);    //mytask就是命令(任务)

    }
}

//线程解决任务,快递小哥派送
package AT;

import java.io.File;

public class Mytask implements Runnable {
    String  name="";
    String  filename="fzk.txt";    //需要被查找出的文件(收件人地址)
    static int a=0;             //用于判断是哪个线程找到了文件
    public Mytask(String name){
        this.name=name;
    }
    public void run() {
        try {
            File file=new File(this.name);
            File[] fs= file.listFiles();           //返回所有的文件
            System.out.println("文件查找结果:");
            Find(file);
            if (a==1){
                System.out.println("线程"+this.name+" found");
            }
            else{
                System.out.println("线程"+this.name+" not found");
            }
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }
    void Find(File fa){
        File[] fs=fa.listFiles();
        if (fa.isDirectory()){       //isDirectory方法是判断是否为文件夹 是的话深入遍历子文件
            if (null!=fa){
                for (File file1:fs){
                    if (file1.getName().equals(filename)){
                        System.out.println("找到了,文件的绝对路径:");
                        System.out.println(file1.getAbsolutePath());  //文件的绝对路径
                        a=1;   //表示找到了
                    }
                    Find(file1);       //遍历子文件夹将file1传给fa
                }
            }
        }
    }
}

运行结果:

文件查找结果:
文件查找结果:
线程D:\QQ\178 not found
找到了,文件的绝对路径:
D:\QQ\951\QQ\fzk.txt
线程D:\QQ\951 found

这是我的第一篇博客,计算机小白。有很多不好的地方,希望大家指正。也希望这篇博客能给需要的人些许帮助。

发布了12 篇原创文章 · 获赞 9 · 访问量 549

猜你喜欢

转载自blog.csdn.net/weixin_45219512/article/details/105001527