idea中利用线程池来实现复制拷贝widows文件功能的实现

线程池工具类

Exectors 是线程池工具类,可以帮我们快速构建线程池。

三种常见的线程池:

  1. 固定线程个数的线程池

  2. 不限线程个数的线程池

  3. 单个线程的线程池(串行任务池)

 public class TestExecutors {
    public static void main(String[] args) {
        //创建一个固定个数的线程池
        ExecutorService es = Executors.newFixedThreadPool(3);
        //创建一个不限容量的线程池
        // ExecutorService es = Executors.newCachedThreadPool();
        //创建一个只有一条线程的线程池
        // ExecutorService es = Executors.newSingleThreadExecutor();
      
      }
  }

在这里使用的是第一个

import java.io.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class MyCopy implements Runnable{
    private File from;
    private File to;

    public MyCopy(File from, File to) {
        this.from = from;
        this.to = to;
    }

    @Override
    public void run() {
        try {
            FileInputStream fin=new FileInputStream(from);
            FileOutputStream fout=new FileOutputStream(to);
            byte b[]=new byte[50]; //字节的长度代表读文件数据时每次读多少字节,如果想提高速度就可以设大一些。
            int len=0;
            while ((len=fin.read(b))!=-1){
                fout.write(b,0,len);
            }
            fout.close();
            fin.close();
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

    }

    public static void main(String[] args) {

        ExecutorService es = Executors.newFixedThreadPool(2); //括号里的数字是线程池里有多少线程。拷贝时会两两的拷贝。
        File file=new File("E:/test/aa"); //拷贝文件所在的目录
        File[] files = file.listFiles();
        for (File f:files){ //加强型for循环
            if (f.isFile()){
                es.submit(new MyCopy(f,new File("E:/test/bb/"+f.getName())));//文件拷贝后的目录。
            }                  
        }
        es.shutdown();
    }
}

 其中 byte b[]=new byte[50]; //字节的长度代表读文件数据时每次读多少字节,如果想提高速度就可以设大一些。我设50是为了能更好的体验到线程池的作用。

ExecutorService es = Executors.newFixedThreadPool(2); //括号里的数字是线程池里有多少线程。拷贝时会两两的拷贝。

运行结果:

准备复制拷贝的文件:

idea中利用线程池来实现复制拷贝widows文件功能的实现_第1张图片

 拷贝后:

速度可能会很快,文件选大一些,就能明显的感受到是两两拷贝(运行程序时时刻在文件夹中刷新)

idea中利用线程池来实现复制拷贝widows文件功能的实现_第2张图片

idea中利用线程池来实现复制拷贝widows文件功能的实现_第3张图片

拷贝完成:

idea中利用线程池来实现复制拷贝widows文件功能的实现_第4张图片

你可能感兴趣的:(intellij-idea,java,ide)