1

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の代わりにsubmitを使用します。これによりFutureが返され、result.getはタスクが実行されるまでブロックされます

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