在JEE中实现IO管道(Wildfly 11.0)

时间:2018-03-01 21:58:44

标签: multithreading java-ee wildfly

我正在从独立应用程序移植一些代码以拥有基于Web的前端。我们使用wildfly 11.0作为容器。代码大量使用线程,我不知道如何在JEE中实现它。在partiular的secton上使用管道流,其中一个进程写入其中,另一个进程读取它。这两个进程都执行文件IO并可能阻止。代码部分负责压缩大型目录树并将zip文件分块为多个单独的文件。这是一个长时间运行的过程,因为要压缩的目录在千兆字节范围内。如何管理在JEE中通过管道输入流连接的两个线程的分叉,或者是否有实现相同结果的最佳实践。

以下是有问题的代码示例

ExecutorService Executor = Executors.newCachedThreadPool();
File directoryToZip = new File(dirToZipName);
PipedInputStream pis = new PipedInputStream();
PipedOutputStream pos = new PipedOutputStream();
pos.connect(pis);
List<File> fileList = new ArrayList<File>();
// get all files into a list
getAllFiles(directoryToZip, fileList); 
Callable<Void> producer = () -> writeZipFile(pos, directoryToZip,fileList);
Callable<FileMetaData> consumer = () ->    FileSplitter.splitFile(pis,directoryToZip.getName(), new File(outputDir), 1024);
Future<FileMetaData> future = Executor.submit(consumer);
Executor.submit(producer);
future.get();
Executor.shutdown();

0 个答案:

没有答案