1

我有一个执行器在 singleThreadExecutor 中运行,我需要在它完成调用其他方法(saveJsonFile())之后,但只有当我的执行器完成时

我和执行人的课

        ExecutorService e = Executors.newSingleThreadExecutor();

                    //Download HTML and Unzip Threads
                    typeDownloaded = "html";
                    DownloadUtil.downloadHtml(e, this, dns, port, offlineUuid, filePathHtmlDownload, cookies, typeDownloaded);
                    UnzipUtil.unZipHtml(e, this, filePathHtmlDownload, outputFolder, typeDownloaded);
                    e.shutdown();
                    saveJsonFile();

我的 UnzipUtil 类:

public class UnzipUtil {

    public static void unZipHtml(Executor e, MainViewController controller, String zipFile, String outputFolder, String type) {
        e.execute(new UnzipTask(controller, zipFile, outputFolder, type));
    }

    public static void unZipImages(Executor e, MainViewController controller, int numImg, String outputFolder, String type) throws SystemException, PortalException {
        String filePath;

        filePath = System.getProperty("user.home") + File.separator + "Documents" + File.separator + "TargetApp" + File.separator + "TempImageDownload.zip";
        System.out.println(filePath);
        e.execute(new UnzipTask(controller, filePath, outputFolder, type));

    }
}
4

2 回答 2

1

也许我没有得到问题,但你不能使用Futures 和 Callables吗?基本上,您可以指定一个“回调”,当您的解压缩任务完成时将调用它......从链接中引用(您还可以在其中找到有关如何使用机器的简单示例):

Future 表示异步计算的结果。提供了检查计算是否完成、等待其完成以及检索计算结果的方法。

于 2013-02-07T21:22:32.123 回答
0

使用提交而不是 e.exectute。这将返回一个 Future,result.get 将阻塞直到你的任务被执行

Future<?> result = e.submit(...);
result.get() 
于 2013-02-07T21:18:43.787 回答