kkFileView(二)

2021SC@SDUSC

目录

一、线程池的使用

那么,什么是线程池?

 关于ExecutorService

二、 多线程处理压缩文件

 1.ZipExtractorWorker类

2.RarExtractorWorker类

3.SevenZExtractorWorker类



一、线程池的使用

由于本人负责的压缩文件处理第一个就涉及到Java线程池的问题,因此本次报告先围绕Java线程池即多线程问题展开。

之前大一学习java学到过多线程,而线程池是解决多线程的一个手段。

那么,什么是线程池?

在一个线程的生命周期内,往往线程创建和销毁的时间要大于线程执行的时间,所以频繁的创建线程会消耗额外的时间。如果等到有任务来了,在去创建线程的话效率就会比较低,如不把线程放在某个地方,任务来了,直接把线程拿过来用比较好;另外,线程池可以管理控制线程,使用线程池,可以进行统一分配,方便调优和监控。线程可以提供队列,存放缓冲等待执行的任务。

由此看来,线程池可以

  • 降低资源消耗
  • 提高响应速度
  • 提高线程的可管理性

 关于ExecutorService

ExecutorService是Java中对线程池定义的一个接口,它java.util.concurrent包中。

private final ExecutorService executors = Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());

 ExecutorService创建,newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。

executors.submit(new ZipExtractorWorker(entriesToBeExtracted, zipFile, filePath));

submit(new Runnable)这个方法接收一个Runnable实例,并且异步的执行,上述代码端括号内的类继承自Runnable。

二、 多线程处理压缩文件

 1.ZipExtractorWorker类

处理zip压缩文件

 public ZipExtractorWorker(List<Map<String, ZipArchiveEntry>> entriesToBeExtracted, ZipFile             zipFile, String filePath) 
{
            this.entriesToBeExtracted = entriesToBeExtracted;
            this.zipFile = zipFile;
            this.filePath = filePath;
 }

entriesToBeExtracted——————要提取的文件条目

zipFile—————————————压缩文件

filePath————————————压缩文件路径

2.RarExtractorWorker类

处理rar压缩文件

public RarExtractorWorker(List<Map<String, FileHeader>> headersToBeExtracted, Archive archive, String filePath) {
            this.headersToBeExtracted = headersToBeExtracted;
            this.archive = archive;
            this.filePath = filePath;
        }

3.SevenZExtractorWorker类

处理7Z压缩文件

public SevenZExtractorWorker(List<Map<String, SevenZArchiveEntry>> entriesToBeExtracted, String filePath) {
            this.entriesToBeExtracted = entriesToBeExtracted;
            this.filePath = filePath;
        }

猜你喜欢

转载自blog.csdn.net/eldrida1/article/details/120637800