多執行緒之實現Callable介面完成同步下載檔案
阿新 • • 發佈:2020-11-03
匯入依賴
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.7</version>
</dependency>
建立Thread1 類 實現多執行緒下載檔案
public class Thread1 implements Callable<Boolean> { //網路地址 private String url; //儲存的檔名 private String name; public Thread1(String url, String name) { this.url = url; this.name = name; } //下載檔案的執行緒執行體 @Override public Boolean call() { FileDownLoader fileDownLoader = new FileDownLoader(); fileDownLoader.downLoader(url,name); System.out.println("下載了檔名為:" + name); return true; } public static void main(String[] args) throws ExecutionException, InterruptedException { Thread1 t1 = new Thread1("https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1887333225,3220403259&fm=26&gp=0.jpg","紫霞仙子.jpg"); Thread1 t2 = new Thread1("https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=1115306696,372850764&fm=26&gp=0.jpg","冰霜戀舞曲.jpg"); Thread1 t3 = new Thread1("https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=3005655293,1504161907&fm=26&gp=0.jpg","元素使.jpg"); //建立執行服務 ExecutorService service = Executors.newFixedThreadPool(3); //提交執行 Future<Boolean> f1 = service.submit(t1); Future<Boolean> f2 = service.submit(t2); Future<Boolean> f3 = service.submit(t3); //獲取結果 Boolean rs1 = f1.get(); Boolean rs2 = f2.get(); Boolean rs3 = f3.get(); //關閉服務 service.shutdown(); } } //下載器 class FileDownLoader{ // 下載方法 public void downLoader(String url,String name) { try { FileUtils.copyURLToFile(new URL(url),new File(name)); } catch (IOException e) { e.printStackTrace(); System.out.println("IO異常:downLoader方法出錯"); } } }
Callable的的優點:
- 可以自定義返回值
- 可以丟擲異常