java線程池批量下載,異步下載結束後,再繼續往下執行.而不是邊異步下載,邊繼續執行其他業務邏輯

業務需求是:首先需要把表裏的數據打包成json格式放在一個文件夾下面,然後把每條數據中的圖片路徑對應的圖片也下載到該文件夾下面,最終打一個壓縮包上傳

1. 首先在類的最上面定義一個屬性,該屬性用於計算剩餘多少任務還未被執行,當cdl爲0時,線程調度停止

private static CountDownLatch cdl;

2. 爲cdl賦初始值,並開始下載,僅貼出部分代碼

cdl = new CountDownLatch(urlList.size());//賦值
            final HttpTools httpTools = new HttpTools();
            ExecutorService exec = Executors.newFixedThreadPool(10);
            for (final String url : urlList) {
                final String picName = url.substring(url.lastIndexOf("/") + 1, url.length());
                exec.execute(new Runnable() {
                    @Override
                    public void run() {
                        cdl.countDown();   
                httpTools.download("xxxxxx.png");//自己定義的下載方法
                    }
                });
            }
            try {
                cdl.await();//恢復執行
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            exec.shutdown();//關閉線程池執行器

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章